- HTTP/3 telah dikembangkan sejak 2016, dan protokol dasarnya, QUIC, pertama kali diperkenalkan oleh Google pada 2013
- Saat ini sudah distandardisasi dan mendapat dukungan luas seperti berikut
- Didukung oleh 95% browser
- 32% dari permintaan HTTP Cloudflare menggunakan HTTP/3
- 35% situs web menampilkan dukungan HTTP/3 (melalui alt-svc atau DNS)
- Namun, pustaka standar di bahasa-bahasa utama masih kurang mendukung QUIC dan HTTP/3
- Tidak disertakan dalam pustaka standar Node.js, Go, Rust, Python, Ruby, dan lainnya
- Curl baru-baru ini menambahkan dukungan HTTP/3, tetapi masih berstatus eksperimental dan dinonaktifkan secara default
- Server populer Nginx masih dalam status dukungan eksperimental dan dinonaktifkan secara default
- Apache tidak memiliki rencana dukungan HTTP/3
- Ingress-Nginx milik Kubernetes telah membatalkan rencana dukungan HTTP/3
Kebutuhan setelah HTTP/1.1
- HTTP/3 berguna untuk browser web dan trafik CDN dengan latensi tinggi
- Keuntungan utama yang diberikan HTTP/2 dan HTTP/3:
- Multiplexing untuk mengurangi latensi waktu tunggu respons
- Kompresi header HTTP untuk mengurangi trafik (menggunakan HPACK, QPACK)
- Streaming dua arah memungkinkan pertukaran data real-time antara klien dan server
- Prioritisasi memungkinkan permintaan penting diproses lebih dulu
- Keuntungan tambahan HTTP/3:
- Penanganan stream yang independen sehingga packet loss pada satu stream tidak memengaruhi stream lain
- TLS handshake 0-RTT untuk mempercepat inisialisasi koneksi
- Migrasi koneksi memungkinkan koneksi tetap dipertahankan saat alamat IP berubah
- Perbaikan kontrol kemacetan untuk meningkatkan performa dan stabilitas
Dampak peningkatan performa HTTP/3
- Hasil benchmark RequestMetric:
- HTTP/3 memberikan kecepatan respons yang lebih cepat dibanding HTTP/1.1 dan HTTP/2
- Contoh nyata dari Fastly:
- Waktu ke byte pertama pada HTTP/3 berkurang 18%
Masalah kurangnya dukungan HTTP/3
- HTTP/3 didukung luas di browser dan CDN, tetapi sulit digunakan oleh developer pada umumnya
- Saat ini ada dua jenis trafik web:
- Web hyperscale: berbasis browser utama dan server besar (Google, Meta, Amazon, dll.)
- Web long-tail: berbasis server dan klien skala kecil hingga menengah (API backend, aplikasi mobile, IoT, dll.)
- Perbedaan utamanya:
- Trafik long-tail mencakup 67% dari total trafik
- Hyperscale dapat mengembangkan dan menerapkan dengan cepat, sedangkan long-tail kekurangan sumber daya dan lebih mengutamakan stabilitas
- Sangat bergantung pada alat open source
OpenSSL dan masalah QUIC
- OpenSSL adalah fondasi bagi sebagian besar alat jaringan open source
- BoringSSL merilis API dukungan QUIC pada 2018, tetapi OpenSSL memperkenalkan API QUIC versinya sendiri
- Masalah utamanya:
- Tidak kompatibel dengan implementasi berbasis BoringSSL yang sudah ada
- Curl dan bahasa-bahasa utama sulit mengubah dependensi OpenSSL mereka
- Node.js sempat mempertimbangkan penggunaan BoringSSL sebagai pengganti OpenSSL, tetapi tidak terwujud
Prospek ke depan
- Saat web hyperscale mengadopsi HTTP/3, ada kemungkinan muncul kesenjangan performa dengan web long-tail
- Kurangnya dukungan HTTP/3 dapat menimbulkan masalah seperti berikut:
- Memperkuat keunggulan kecepatan dan stabilitas situs hyperscale
- Jika framework berbasis HTTP/3 menjadi umum, web long-tail akan sulit mengaksesnya
- Tidak adanya dukungan HTTP/3 berpotensi digunakan sebagai kriteria pemblokiran klien
- Solusi yang diperlukan:
- Perlu menyelesaikan masalah API QUIC di OpenSSL
- Perlu mengembangkan alat dan adaptor yang meningkatkan kompatibilitas dengan implementasi QUIC dan HTTP/3 yang sudah ada
- Perlu upaya memperluas dukungan HTTP/3 di alat open source
Kesimpulan
- HTTP/3 jelas menawarkan keuntungan performa dan stabilitas, tetapi saat ini hanya perusahaan hyperscale yang bisa menggunakannya dengan mudah
- Diperlukan perbaikan alat dan standar agar HTTP/3 dapat digunakan dengan mudah juga di web long-tail
1 komentar
Opini Hacker News
Ada pendapat bahwa sulit menemukan alat open source populer yang sepenuhnya mendukung HTTP/3
QUIC atau HTTP/3 belum disertakan dalam pustaka standar bahasa-bahasa utama
Masalah terbesar dalam deployment HTTP/3 skala besar adalah bertambahnya permukaan kode yang berpotensi rentan
Lambatnya adopsi QUIC disebabkan OpenSSL tidak menyediakan komponen dasar yang diperlukan oleh implementasi QUIC yang ada
HTTP/2 dan HTTP/3 tidak lagi dipandang sebagai protokol lapisan aplikasi, melainkan pada tingkat TCP dan TLS
nginx masih belum menyediakan dukungan HTTP/3 yang siap produksi
Di Python, ada yang menggunakan niquests dan itu mendukung HTTP/3
Node.js telah mempublikasikan pembaruan tentang status QUIC, dan mengalami kesulitan karena lambatnya dukungan API dari OpenSSL
Jika menggunakan load balancer dari penyedia cloud publik, secara default akan menggunakan HTTP/3
Semua proyek sampai tingkat tertentu digerakkan oleh open source dan komunitas