HTTPQUERY
Bahasa Indonesia

101 Switching Protocols

Penggunaan

Klien yang menyertakan header permintaan Upgrade menginginkan server menggunakan protokol berbeda untuk sisa sesi HTTP. Beberapa protokol didaftar pada satu baris, dipisahkan koma, menurut urutan preferensi menurun. Versi protokol bersifat opsional.

Connection: upgrade
Upgrade: protocol-name[/protocol-version]

Permintaan ini dilakukan ketika ada keuntungan dari melakukannya, misalnya memanfaatkan fitur yang ditawarkan oleh versi protokol yang lebih baru. Upgrade ini hanya didukung oleh HTTP/1.1, dan klien tidak punya cara untuk memaksa server berganti protokol. Upgrade bersifat opsional, dan server mengembalikan 200 ketika header Upgrade diabaikan.

Permintaan dari sisi server

Server tidak punya cara untuk memaksa klien meng-upgrade protokol, tetapi server menolak permintaan ketika klien gagal memenuhi persyaratannya. Ketika klien mengirim permintaan menggunakan protokol yang tidak didukung server, server mengembalikan 426. Dengan menggunakan protokol yang diarahkan oleh server, permintaan klien berikutnya akan diterima dan diproses.

Contoh

Klien meminta upgrade dari HTTP/1.1 ke protokol WebSocket. Server menerimanya dan berganti protokol.

Permintaan

GET /chat HTTP/1.1
Host: example.com
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==

Respons

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

WebSocket dan lapisan protokol

Koneksi WebSocket dimulai sebagai permintaan HTTP dan di-upgrade melalui handshake 101. Setelah upgrade selesai, koneksi beroperasi sebagai kanal TCP full-duplex yang persisten pada lapisan aplikasi (layer 7). Framing HTTP digantikan oleh format frame WebSocket. Server-Sent Events (SSE) merupakan alternatif untuk streaming dari server ke klien tanpa memerlukan upgrade protokol.

Referensi kode

.NET

HttpStatusCode.SwitchingProtocols

Rust

http::StatusCode::SWITCHING_PROTOCOLS

Rails

:switching_protocols

Go

http.StatusSwitchingProtocols

Symfony

Response::HTTP_SWITCHING_PROTOCOLS

Python3.5+

http.HTTPStatus.SWITCHING_PROTOCOLS

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_SWITCHING_PROTOCOLS

Angular

@angular/common/http/HttpStatusCode.SwitchingProtocols