Upgrade
Penggunaan
Header Upgrade memungkinkan negosiasi protokol pada koneksi HTTP/1.1 yang sudah ada. Klien mengirim header ini untuk mengusulkan peralihan ke protokol lain, dan server dapat menerimanya dengan merespons 101 Switching Protocols atau mengabaikan permintaan tersebut dan melanjutkan dengan protokol saat ini.
Target upgrade yang umum mencakup WebSocket (websocket), TLS (TLS/1.2, TLS/1.3), dan HTTP/2 cleartext (h2c). Upgrade WebSocket adalah bentuk yang paling banyak digunakan pada penerapan modern, karena memungkinkan komunikasi full-duplex antara browser dan server.
Header Connection wajib disertakan bersama Upgrade. Pengirim menyetel Connection: upgrade untuk memberi tahu perantara agar meneruskan permintaan upgrade alih-alih menghabiskan koneksi itu sendiri.
Server juga mengirim Upgrade sebagai bagian dari response 426 Upgrade Required. Hal ini memberi tahu klien bahwa server menolak memproses permintaan dengan protokol saat ini, dan mencantumkan protokol yang dibutuhkan pada nilai Upgrade.
Catatan
Header Upgrade hanya berlaku untuk HTTP/1.1. HTTP/2 dan HTTP/3 menggunakan ALPN (Application-Layer Protocol Negotiation) selama TLS handshake untuk pemilihan protokol.
websocket
Mengupgrade koneksi ke protokol WebSocket untuk komunikasi full-duplex. Klien menyertakan header Sec-WebSocket-Key dan Sec-WebSocket-Version bersama permintaan upgrade tersebut.
h2c
Mengupgrade koneksi ke HTTP/2 melalui cleartext (tanpa TLS). Klien menyertakan header HTTP2-Settings yang berisi parameter koneksi HTTP/2 yang dienkode dalam base64url.
TLS/1.2, TLS/1.3
Mengupgrade koneksi HTTP tanpa enkripsi menjadi koneksi yang diamankan TLS. Mekanisme ini lebih jarang dipakai dibandingkan menjalin TLS secara langsung.
Contoh
Klien meminta upgrade WebSocket. Server menerimanya dengan merespons 101 Switching Protocols dan mengonfirmasi protokol baru tersebut.
GET /chat HTTP/1.1
Host: example.re
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Klien mengusulkan upgrade ke HTTP/2 melalui cleartext. Header HTTP2-Settings membawa parameter HTTP/2 awal yang dienkode dalam format base64url.
GET / HTTP/1.1
Host: example.re
Connection: upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: AAMAAABkAAQCAAAAAAIAAAAA
Server mengharuskan klien menggunakan protokol yang berbeda. Response 426 Upgrade Required menyertakan header Upgrade yang mencantumkan protokol yang dapat diterima.
HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.3
Connection: upgrade