WebSocket ialah sebuah protokol yang membenarkan komunikasi dwi-arah dalam satu sambunganTCP. Sambungan WebSocket dimulai menerusi persetujuan (handshake) antara pelanggan dan pelayan. Protokol ini menggunakan format yang serupa denganHTTP supaya pelayan lama faham akan permintaan yang dipersembahkan kepadanya lantas mampu membalas dengan format yang difahami oleh pelanggannya.
Protokol WebSocket dimulakan dengan persetujuan antara pelanggan dengan pelayan. Permintaan pelanggan dan balasan pelayan dalam persetujuan tersebut ditunjukkan di bawah.
Permintaan pelanggan:
GET /sesuatu HTTP/1.0Host: pelayan.contoh.comUpgrade: websocketSec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==Sec-WebSocket-Protocol: protokolku, protokolmuSec-WebSocket-Version: 13Origin: http://contoh.com
Balasan pelayan:
HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeAccess-Control-Allow-Origin: http://contoh.comSec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=Sec-WebSocket-Protocol: protokolku
Sama seperti HTTP, setiap pengepala dipisahkan dengan\r\n dan satu baris kosong perlu ditambah pada hujung pesanan.Sec-WebSocket-Accept dijanakan dengan menyambungkanSec-WebSocket-Key yang diterima daripada pelanggan, dengan rentetan sakti 258EAFA5-E914-47DA-95CA-C5AB0DC85B11. Rentetan hasil penyambungan tadi kemudiannya dicincangkan denganSHA-1 lalu dikodkanbase64.
Selepas persetujuan selesai, hubungan dwi-arah pun terbina. Dari sini, pelayan dan pelanggan masing-masing berkomunikasi antara satu sama lain menggunakan kerangka WebSocket samada kerangka teks atauperduaan. Format kerangka WebSocket adalah seperti berikut:[1]
| Medan | Saiz (bit) | Maksud | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Fin | 1 | Menandakan samada pesanan ialah pesanan terakhir atau bukan. | ||||||||||||||||||
| Bit-bit simpanan | 3 | Bit-bit yang tidak dunakan dan disimpan untuk masa hadapan. Sentiasa0 melainkan jika digunakan oleh mana-mana sambungan (extension). | ||||||||||||||||||
| Opkod | 4 | Memberi panduan kepada penerima pesanan tentang muatan data yang dibawa oleh kerangka.
| ||||||||||||||||||
| Bertopeng | 1 | Penanda samada muatan ditopengkan atau tidak. Biasanya sentiasa1 bagi pesanan yang datang daripada pelanggan. | ||||||||||||||||||
| Panjang muatan | 7 | Panjang muatan (dalambait) oleh pesanan jika panjang kurang daripada 125 bait. | ||||||||||||||||||
| 7+16 | Jika nilai 7 bit pertama ialah 126, maka panjang muatan disimpan dalam 16 bit seterusnya. | |||||||||||||||||||
| 7+64 | Jika nilai 7 bit pertama ialah 127, maka panjang muatan disimpan dalam 64 bit seterusnya. | |||||||||||||||||||
| Kunci penopeng | 32 | Setiapbait ialah kunci yang digunakan untuk menopengkan muatan. | ||||||||||||||||||
| Data muatan | x + y | Data yang dibawa oleh pesanan. | ||||||||||||||||||
| Data sambungan | x | Sentiasa0 melainkan penggunaan sambungan (extension) telah dipersetujui. | ||||||||||||||||||
| Data aplikasi | y | Bait-bait lebihan dalam kerangka ialah data aplikasi. |
Algoritma penopengan adalah seperti berikut:
muatan_bertopeng = ""bagi indeksdari 0hingga panjang_muatan muatan_bertopeng += muatan[indeks] ^ topeng[indeksmod 4]
SkemaURI untuk prokol ini ada dua, iaituws:// (teks polos) danwss:// (selamat).