HTTP/3 adalah versi utama ketiga dari protokol HTTP. Berbeda dengan HTTP/1.1 dan HTTP/2 yang menggunakan protokol TCP tradisional di lapisan transport, HTTP/3 mengadopsi protokol Quick UDP Internet Connection (QUIC) berbasis UDP. Perubahan ini memungkinkan HTTP/3 mencapai latensi lebih rendah, pemulihan kesalahan yang lebih tangguh, serta multiplexing koneksi yang lebih efisien. Topik ini menjelaskan cara mengonfigurasi layanan berbasis HTTP/3 pada gerbang ASM.
Informasi latar belakang
HTTP/3 menggunakan QUIC di atas UDP sebagai mekanisme transport dan karenanya memiliki keunggulan berikut dibandingkan HTTP/2:
Latensi handshake berkurang: HTTP/3 memanfaatkan fitur 0-RTT dari protokol QUIC untuk menyelesaikan pembentukan koneksi. (RTT adalah singkatan dari round trip time.) Selain itu, TLS terintegrasi ke dalam QUIC untuk mendukung enkripsi dan handshake secara simultan, sehingga sangat mengurangi latensi selama pembentukan koneksi.
Mekanisme multiplexing baru: HTTP/2 mengalami blokir kepala antrian (head-of-line blocking) di lapisan TCP. HTTP/3 menggunakan QUIC untuk melakukan multiplexing beberapa aliran independen dalam satu koneksi, dan aliran data tersebut saling independen. Bahkan jika sebuah paket dalam satu aliran data hilang, transmisi aliran data lainnya tidak terblokir. Dengan demikian, blokir pada satu aliran data tidak lagi memengaruhi kinerja transmisi seluruh koneksi.
Migrasi koneksi: HTTP/3 mendukung migrasi koneksi antar alamat IP yang berbeda, bahkan ketika lingkungan jaringan berubah, misalnya beralih dari jaringan Wi-Fi ke jaringan seluler. Hal ini menjamin kontinuitas dan stabilitas koneksi.
Keamanan: HTTP/3 mewajibkan penggunaan TLS 1.3 untuk transmisi terenkripsi, sehingga menjamin keamanan dan perlindungan privasi yang lebih tinggi.
Gerbang ASM mendukung HTTP/3. Anda dapat menggunakan HTTP/3 untuk mengakses layanan yang diekspos melalui gerbang ASM guna meningkatkan kinerja dan stabilitas layanan.
Prasyarat
Kluster Container Service for Kubernetes (ACK) telah ditambahkan ke instans ASM Anda, dan versi instans ASM Anda adalah 1.16 atau lebih baru. Untuk informasi selengkapnya, lihat Add a cluster to an ASM instance.
Gerbang masuk (ingress gateway) telah dideploy. Untuk informasi selengkapnya, lihat Create an ingress gateway.
Aplikasi HTTPBin telah dideploy. Untuk informasi selengkapnya, lihat Deploy the HTTPBin application.
-
Kluster ACK menggunakan versi 1.24 atau lebih baru, dan Cloud Controller Manager (CCM) menggunakan versi 2.6.0 atau lebih baru. Untuk informasi selengkapnya, lihat Cloud Controller Manager.
Sertifikat bernama aliyun.com.cert telah dibuat untuk instans ASM Anda. Untuk informasi selengkapnya, lihat Use the certificate management feature of ASM.
Langkah 1: Aktifkan HTTP/3
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Di pojok kanan atas halaman Base Information, klik Settings. Di sidebar yang muncul, pilih Enable HTTP/3.
Langkah 2: Aktifkan pendengar UDP pada gerbang masuk ASM
Protokol QUIC berbasis UDP. Oleh karena itu, Anda harus mengaktifkan pendengar UDP pada gerbang masuk ASM.
Pada contoh ini, Anda dapat memodifikasi konfigurasi YAML gerbang masuk ASM untuk mengaktifkan pendengar UDP pada Port 444 gerbang masuk ASM.
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
labels:
asm-gateway-type: ingress
name: ingressgateway
namespace: istio-system
spec:
......
ports:
- name: http-0
port: 80
protocol: HTTP
targetPort: 80
-name: udp # Aktifkan pendengar UDP pada Port 444.
port: 444
protocol: UDP
targetPort: 444
......Gerbang ASM mendukung pendengar TCP dan UDP pada port yang sama. Misalnya, Anda dapat menambahkan pendengar UDP pada Port 443 yang digunakan untuk mengekspos layanan HTTPS. Kedua pendengar tersebut tidak saling bertabrakan.
Langkah 3: Konfigurasikan Gateway Istio
QUIC mewajibkan komunikasi TLS. Oleh karena itu, Anda harus mengonfigurasi sertifikat untuk Gateway Istio. Perbarui konfigurasi Gateway Istio menggunakan file YAML berikut:
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: httpbin
namespace: default
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- '*'
port:
name: test
number: 80
protocol: HTTP
- hosts:
- '*'
port:
name: quic
number: 444
protocol: HTTPS
tls:
credentialName: aliyun.com.cert
mode: SIMPLELangkah 4: Lakukan pengujian untuk mengakses gerbang ASM menggunakan HTTP/3
curl adalah tool pengujian HTTP umum. Namun, perintah curl tidak mendukung HTTP/3 secara default. Anda dapat menjalankan perintah berikut untuk memeriksa apakah curl Anda mendukung HTTP/3:
curl --version | grep http3Jika output yang mirip dengan berikut ditampilkan, perintah curl di lingkungan saat ini mendukung HTTP/3.
curl 8.9.0-DEV (aarch64-apple-darwin23.5.0) libcurl/8.9.0-DEV quictls/3.1.4 zlib/1.2.12 libidn2/2.3.7 nghttp2/1.59.0 ngtcp2/1.2.0 nghttp3/1.1.0Jika tidak ada output yang ditampilkan, perintah curl di lingkungan saat ini tidak mendukung HTTP/3. Anda dapat membuat ulang curl versi yang mendukung HTTP/3. Untuk informasi selengkapnya, lihat Build with quictls.
Setelah proses build selesai, Anda dapat menjalankan perintah berikut untuk menguji apakah HTTP/3 didukung:
curl -k --http3-only -H Host:aliyun.com --resolve aliyun.com:444 :${IP address of the ASM gateway} https://aliyun.com:444/headers -vOutput yang diharapkan:
......
* Connected to aliyun.com (xxx.xx.xx.x) port 444
* using HTTP/3
* [HTTP/3] [0] OPENED stream for https://aliyun.com:444/headers
* [HTTP/3] [0] [:method: GET]
* [HTTP/3] [0] [:scheme: https]
* [HTTP/3] [0] [:authority: aliyun.com]
* [HTTP/3] [0] [:path: /headers]
* [HTTP/3] [0] [user-agent: curl/8.9.0-DEV]
* [HTTP/3] [0] [accept: */*]
> GET /headers HTTP/3
> Host:aliyun.com
> User-Agent: curl/8.9.0-DEV
> Accept: */*
>
* Request completely sent off
* old SSL session ID is stale, removing
< HTTP/3 200
< server: istio-envoy
< date: Wed, 26 Jun 2024 07:40:07 GMT
< content-type: application/json
< content-length: 460
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 1
< alt-svc: h3=":444"; ma=86400
<
{
"headers": {
"Accept": "*/*",
"Host": "aliyun.com",
"Transfer-Encoding": "chunked",
"User-Agent": "curl/8.9.0-DEV",
"X-Envoy-Attempt-Count": "1",
"X-Envoy-External-Address": "xx.xx.xx.xx",
"X-Forwarded-Client-Cert": "xxxxxxx"
}
}
* Connection #0 to host aliyun.com left intactReferensi
Untuk informasi lebih lanjut mengenai alasan mengapa blokir kepala antrian di lapisan TCP pada HTTP/2 hanya dapat dikurangi tetapi tidak sepenuhnya dihindari, lihat Hypertext Transfer Protocol Version 2 (HTTP/2).
HTTP/3 memperkenalkan mekanisme multiplexing baru yang secara fundamental menyelesaikan masalah blokir kepala antrian. Dokumentasi resmi juga menjelaskan cara meningkatkan kinerja koneksi dengan menghindari blokir kepala antrian. Untuk informasi selengkapnya, lihat QUIC: A UDP-Based Multiplexed and Secure Transport.