Coding Universe

Coding Universe 🚀 Welcome to the coding universe!


Referensi: roadmap.sh, cs.fyi

14/08/2024

6. Keamanan
Ada diskusi ekstensif mengenai apakah keamanan (melalui TLS) harus diwajibkan untuk HTTP/2 atau tidak. Pada akhirnya diputuskan untuk tidak menjadikannya wajib. Namun, sebagian besar vendor menyatakan bahwa mereka hanya akan mendukung HTTP/2 bila digunakan melalui TLS. Jadi, meskipun HTTP/2 tidak memerlukan enkripsi berdasarkan spesifikasi tetapi sudah menjadi wajib secara default. Meskipun demikian, HTTP/2 ketika diterapkan melalui TLS memang memberlakukan beberapa persyaratan, yaitu. TLS versi 1.2 atau lebih tinggi harus digunakan, harus ada tingkat ukuran kunci minimum tertentu, diperlukan kunci sementara, dll.

14/08/2024

5. Minta Prioritas
Klien dapat menetapkan prioritas ke aliran dengan memasukkan informasi prioritas dalam bingkai HEADERS yang digunakan untuk membuka aliran. Di waktu lain, klien dapat mengirimkan bingkai PRIORITAS untuk mengubah prioritas aliran.

Tanpa informasi prioritas apa pun, server memproses permintaan secara asinkron, yaitu tanpa urutan apa pun. Jika ada prioritas yang ditetapkan pada suatu aliran, maka berdasarkan informasi prioritas ini, server memutuskan berapa banyak sumber daya yang perlu diberikan untuk memproses permintaan mana.

14/08/2024

4. Server Dorong
Server push adalah fitur luar biasa lainnya dari HTTP/2 di mana server, mengetahui bahwa klien akan meminta sumber daya tertentu, dapat mendorongnya ke klien tanpa klien memintanya. Misalnya, browser memuat halaman web, ia mem-parsing seluruh halaman untuk mengetahui konten jarak jauh yang harus dimuat dari server dan kemudian mengirimkan permintaan konsekuen ke server untuk mendapatkan konten tersebut.

Server push memungkinkan server untuk mengurangi perjalanan bolak-balik dengan mendorong data yang diketahui akan diminta oleh klien. Cara melakukannya adalah, server mengirimkan bingkai khusus yang disebut PUSH_PROMISE yang memberi tahu klien bahwa, “Hai, saya akan mengirimkan sumber daya ini kepada Anda! Jangan minta itu padaku.” Bingkai PUSH_PROMISE dikaitkan dengan aliran yang menyebabkan terjadinya push dan berisi ID aliran yang dijanjikan, yaitu aliran di mana server akan mengirimkan sumber daya untuk didorong.

14/08/2024

3. Kompresi Tajuk
Itu adalah bagian dari RFC terpisah yang secara khusus ditujukan untuk mengoptimalkan header yang dikirim. Intinya adalah ketika kita terus-menerus mengakses server dari klien yang sama, ada banyak data berlebihan yang kita kirimkan di header berulang kali, dan terkadang mungkin ada cookie yang meningkatkan ukuran header yang mengakibatkan penggunaan bandwidth dan peningkatan latensi. Untuk mengatasinya, HTTP/2 memperkenalkan kompresi header.

Tidak seperti permintaan dan respons, header tidak dikompresi dalam format gzip atau kompres dll tetapi ada mekanisme berbeda untuk kompresi header yaitu nilai literal dikodekan menggunakan kode Huffman dan tabel header dikelola oleh klien dan server dan kedua klien dan server menghilangkan header berulang apa pun (misalnya agen pengguna, dll) dalam permintaan berikutnya dan mereferensikannya menggunakan tabel header yang dikelola oleh keduanya.

Sementara kita berbicara tentang header, izinkan saya menambahkan di sini bahwa headernya masih sama seperti di HTTP/1.1, kecuali untuk penambahan beberapa header semu yaitu `:method`,, dan`:scheme:``host``:path`

14/08/2024

2. Multipleksing
Karena HTTP/2 sekarang menjadi protokol biner dan seperti yang saya katakan di atas bahwa ia menggunakan bingkai dan aliran untuk permintaan dan tanggapan, setelah koneksi TCP dibuka, semua aliran dikirim secara asinkron melalui koneksi yang sama tanpa membuka koneksi tambahan apa pun. Dan pada gilirannya, server merespons dengan cara asinkron yang sama yaitu respons tidak memiliki urutan dan klien menggunakan id aliran yang ditetapkan untuk mengidentifikasi aliran yang menjadi milik paket tertentu. Ini juga memecahkan masalah pemblokiran head-of-line yang ada di HTTP/1.x yaitu klien tidak perlu menunggu permintaan yang memakan waktu dan permintaan lainnya masih diproses.

14/08/2024

1. Protokol Biner
HTTP/2 cenderung mengatasi masalah peningkatan latensi yang ada di HTTP/1.x dengan menjadikannya protokol biner. Menjadi protokol biner, lebih mudah untuk diurai tetapi tidak seperti HTTP/1.x, protokol ini tidak lagi dapat dibaca oleh mata manusia. Blok penyusun utama HTTP/2 adalah Frames dan Streams

Bingkai dan Aliran
Pesan HTTP sekarang terdiri dari satu atau lebih frame. Terdapat frame HEADERS untuk meta data dan frame DATA untuk payload dan terdapat beberapa jenis frame lainnya (HEADERS, DATA, RST_STREAM, SETTINGS, PRIORITY dll) yang dapat Anda periksa melalui spesifikasi HTTP/2 .

Setiap permintaan dan respons HTTP/2 diberikan ID aliran unik dan dibagi menjadi beberapa bingkai. Bingkai hanyalah potongan data biner. Kumpulan frame disebut Stream. Setiap frame memiliki id aliran yang mengidentifikasi aliran mana ia berasal dan setiap frame memiliki header yang sama. Selain itu, selain ID aliran yang unik, perlu disebutkan bahwa, setiap permintaan yang dimulai oleh klien menggunakan angka ganjil dan respons dari server memiliki ID aliran angka genap.

Selain HEADERS dan DATA, tipe frame lain yang menurut saya patut disebutkan di sini adalah RST_STREAM yang merupakan tipe frame khusus yang digunakan untuk membatalkan beberapa aliran yaitu klien dapat mengirimkan bingkai ini untuk memberi tahu server bahwa saya tidak memerlukan aliran ini lagi. Dalam HTTP/1.1 satu-satunya cara untuk membuat server berhenti mengirimkan respons ke klien adalah dengan menutup koneksi yang mengakibatkan peningkatan latensi karena koneksi baru harus dibuka untuk setiap permintaan berturut-turut. Saat berada di HTTP/2, klien dapat menggunakan RST_STREAM dan berhenti menerima aliran tertentu saat koneksi masih terbuka dan aliran lainnya masih diputar.

HTTP/2 - 2015Sekarang, Anda harus yakin mengapa kami memerlukan revisi lain pada protokol HTTP. HTTP/2 dirancang untuk p...
14/08/2024

HTTP/2 - 2015
Sekarang, Anda harus yakin mengapa kami memerlukan revisi lain pada protokol HTTP. HTTP/2 dirancang untuk pengangkutan konten dengan latensi rendah. Fitur atau perbedaan utama dari HTTP/1.1 versi lama antara lain:

• Biner, bukan Tekstual.

• Multiplexing - Beberapa permintaan HTTP asinkron melalui satu koneksi.

• Kompresi header menggunakan HPACK.

• Server Push - Beberapa respons untuk satu permintaan.

• Minta Prioritas.

• Keamanan.

14/08/2024

SPDI - 2009
Google melanjutkan dan mulai bereksperimen dengan protokol alternatif untuk membuat web lebih cepat dan meningkatkan keamanan web sekaligus mengurangi latensi halaman web. Pada tahun 2009, mereka mengumumkan SPDY.

"SPDY adalah merek dagang Google dan bukan merupakan akronim."

Terlihat bahwa jika kita terus meningkatkan bandwidth, performa jaringan akan meningkat pada awalnya, namun ada saatnya peningkatan performa tidak terlalu meningkat. Namun jika Anda melakukan hal yang sama dengan latensi, yaitu jika kami terus menurunkan latensi, maka akan terjadi peningkatan kinerja yang konstan. Ini adalah ide inti untuk meningkatkan kinerja di balik SPDY, mengurangi latensi untuk meningkatkan kinerja jaringan.

"Bagi yang belum tahu bedanya, latency adalah penundaan yaitu berapa lama waktu yang dibutuhkan data untuk melakukan perjalanan antara sumber dan tujuan (diukur dalam milidetik) dan bandwidth adalah jumlah data yang ditransfer per detik (bit per detik)."

Fitur-fitur SPDY termasuk, multiplexing, kompresi, prioritas, keamanan dll. Saya tidak akan membahas detail SPDY, karena Anda akan mendapatkan idenya ketika kita masuk ke seluk beluk HTTP/2 di bagian berikutnya seperti yang saya lakukan. mengatakan HTTP/2 sebagian besar terinspirasi dari SPDY.

SPDY tidak benar-benar mencoba menggantikan HTTP; itu adalah lapisan terjemahan melalui HTTP yang ada di lapisan aplikasi dan mengubah permintaan sebelum mengirimkannya ke kabel. Ini mulai menjadi standar defacto dan sebagian besar browser mulai menerapkannya.

Pada tahun 2015, di Google, mereka tidak ingin memiliki dua standar yang bersaing sehingga mereka memutuskan untuk menggabungkannya ke dalam HTTP sambil melahirkan HTTP/2 dan menghentikan SPDY.

14/08/2024

HTTP/1.1 - 1997
Setelah hanya 3 tahun HTTP/1.0, versi berikutnya yaitu HTTP/1.1 dirilis pada tahun 1999; yang membuat banyak perbaikan dibandingkan pendahulunya. Termasuk peningkatan besar atas HTTP/1.0

• Metode HTTP baru ditambahkan, yang memperkenalkan PUT, PATCH, OPTIONS, DELETE.

• Identifikasi Nama Host Di HTTP/1.0 Header host tidak diperlukan tetapi HTTP/1.1 membuatnya diperlukan.

• Koneksi Persisten Seperti dibahas di atas, di HTTP/1.0 hanya ada satu permintaan per koneksi dan koneksi ditutup segera setelah permintaan dipenuhi yang mengakibatkan kinerja yang buruk dan masalah latensi. HTTP/1.1 memperkenalkan koneksi persisten yaitu koneksi tidak ditutup secara default dan tetap terbuka sehingga memungkinkan beberapa permintaan berurutan. Untuk menutup koneksi, header Connection: close harus tersedia berdasarkan permintaan. Klien biasanya mengirimkan header ini pada permintaan terakhir untuk menutup koneksi dengan aman.

• Pipelining Ini juga memperkenalkan dukungan untuk pipelining, di mana klien dapat mengirim beberapa permintaan ke server tanpa menunggu respon dari server pada koneksi yang sama dan server harus mengirimkan respon dalam urutan yang sama dengan permintaan yang diterima. Namun bagaimana klien mengetahui bahwa ini adalah titik di mana pengunduhan respons pertama selesai dan konten untuk respons berikutnya dimulai, Anda mungkin bertanya! Nah, untuk mengatasi hal ini, harus ada header Content-Length yang dapat digunakan klien untuk mengidentifikasi di mana respons berakhir dan dapat mulai menunggu respons berikutnya.

"Perlu dicatat bahwa untuk mendapatkan keuntungan dari koneksi atau pipeline yang persisten, header Content-Length harus tersedia pada respons, karena ini akan memberi tahu klien kapan transmisi selesai dan dapat mengirim permintaan berikutnya (dengan cara sekuensial normal). mengirim permintaan) atau mulai menunggu respons berikutnya (saat pipelining diaktifkan).

Namun masih ada masalah dengan pendekatan ini. Yaitu, bagaimana jika datanya dinamis dan server tidak dapat menemukan panjang konten sebelumnya? Kalau begitu, Anda benar-benar tidak bisa mendapatkan keuntungan dari koneksi yang terus-menerus, bukan?! Untuk mengatasi hal ini, HTTP/1.1 memperkenalkan pengkodean chunked. Dalam kasus seperti itu, server mungkin menghilangkan Panjang konten demi pengkodean yang dipotong (lebih lanjut sebentar lagi). Namun, jika tidak ada satupun yang tersedia, maka koneksi harus ditutup pada akhir permintaan."

• Transfer Potongan Dalam kasus konten dinamis, ketika server tidak dapat benar-benar mengetahui Panjang Konten saat transmisi dimulai, server mungkin mulai mengirimkan konten dalam potongan (potongan demi potongan) dan menambahkan Panjang Konten untuk setiap potongan saat dikirim. . Dan ketika semua potongan dikirim yaitu seluruh transmisi telah selesai, ia mengirimkan potongan kosong yaitu potongan yang Panjang Kontennya disetel ke nol untuk mengidentifikasi klien yang transmisinya telah selesai. Untuk memberi tahu klien tentang transfer yang terpotong, server menyertakan header Transfer-Encoding: terpotong.

• Berbeda dengan HTTP/1.0 yang hanya memiliki autentikasi Dasar, HTTP/1.1 menyertakan autentikasi intisari dan proxy.

• Cache.

• Rentang Byte.

• Character sets.

• Language negotiation.

• Client cookies.

• Dukungan kompresi yang ditingkatkan.

• Kode status baru.

• ..dan banyak lagi.

Saya tidak akan membahas semua fitur HTTP/1.1 dalam postingan ini karena ini adalah topik tersendiri dan Anda sudah dapat menemukan banyak hal tentangnya. Salah satu dokumen yang saya sarankan Anda baca adalah Perbedaan utama antara HTTP/1.0 dan HTTP/1.1 dan berikut adalah tautan ke RFC asli untuk mereka yang berprestasi.

HTTP/1.1 diperkenalkan pada tahun 1999 dan telah menjadi standar selama bertahun-tahun. Meskipun demikian, ini jauh lebih baik dibandingkan pendahulunya; dengan perubahan web setiap hari, ia mulai menunjukkan usianya. Memuat halaman web saat ini membutuhkan lebih banyak sumber daya daripada sebelumnya. Halaman web sederhana saat ini harus membuka lebih dari 30 koneksi. Ya, HTTP/1.1 memiliki koneksi yang persisten, lalu mengapa begitu banyak koneksi? kamu bilang! Alasannya adalah, dalam HTTP/1.1 hanya dapat memiliki satu koneksi luar biasa pada suatu saat. HTTP/1.1 mencoba memperbaikinya dengan memperkenalkan pipelining tetapi tidak sepenuhnya mengatasi masalah ini karena pemblokiran head-of-line di mana permintaan yang lambat atau berat dapat memblokir permintaan di belakang dan begitu permintaan terhenti di dalam pipeline, hal tersebut akan terjadi. harus menunggu permintaan berikutnya dipenuhi. Untuk mengatasi kekurangan HTTP/1.1 ini, pengembang mulai menerapkan solusi, misalnya penggunaan spritesheet, gambar yang dikodekan dalam CSS, file CSS/Javascript tunggal yang sangat besar, sharding domain, dll.

Three-way HandshakeThree-way handshake dalam bentuk sederhananya adalah semua koneksi TCP dimulai dengan jabat tangan ti...
14/08/2024

Three-way Handshake
Three-way handshake dalam bentuk sederhananya adalah semua koneksi TCP dimulai dengan jabat tangan tiga arah di mana klien dan server berbagi serangkaian paket sebelum mulai berbagi data aplikasi.

• SYN - Klien mengambil nomor acak, katakanlah x, dan mengirimkannya ke server.
• SYN ACK - Server mengakui permintaan tersebut dengan mengirimkan paket ACK kembali ke klien yang terdiri dari nomor acak, katakanlah y diambil oleh server dan nomor x+1 dimana x adalah nomor yang dikirim oleh klien.
• ACK - Klien menambah nomor y yang diterima dari server dan mengirimkan kembali paket ACK dengan nomor y+1.

Setelah jabat tangan tiga arah selesai, pembagian data antara klien dan server dapat dimulai. Perlu dicatat bahwa klien dapat mulai mengirimkan data aplikasi segera setelah paket ACK terakhir dikirimkan tetapi server masih harus menunggu paket ACK diterima untuk memenuhi permintaan.

https://i.imgur.com/ohZthqB.png

Namun, beberapa implementasi HTTP/1.0 mencoba mengatasi masalah ini dengan memperkenalkan header baru bernama Connection: keep-alive yang dimaksudkan untuk memberi tahu server “Hai server, jangan tutup koneksi ini, saya memerlukannya lagi”. Namun tetap saja, hal ini tidak didukung secara luas dan masalahnya masih terus berlanjut.

Selain tidak memiliki koneksi, HTTP juga merupakan protokol tanpa kewarganegaraan yaitu server tidak menyimpan informasi tentang klien sehingga setiap permintaan harus memiliki informasi yang diperlukan agar server dapat memenuhi permintaannya sendiri tanpa ada kaitan dengan yang lama. permintaan. Dan hal ini menambah bahan bakar dalam api, yaitu selain banyaknya koneksi yang harus dibuka oleh klien, klien juga harus mengirimkan beberapa data berlebihan melalui kabel yang menyebabkan peningkatan penggunaan bandwidth.

Address

Banyumas

Website

Alerts

Be the first to know and let us send you an email when Coding Universe posts news and promotions. Your email address will not be used for any other purpose, and you can unsubscribe at any time.

Share