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.