Apa yang berbeda dalam protokol WebSocket baru

Spesifikasi protokol WebSocket baru-baru ini telah diperbarui untuk mengatasi masalah keamanan sebelumnya dan sebagian besar stabil. Berikut adalah ringkasan perubahan yang terlibat, beserta beberapa catatan tentang penerapan saat ini.

Apa yang berubah sejak WebSocket HyBi 00?

  • Format frame protokol telah diubah. HyBi 00 digunakan untuk menggunakan "0x00" untuk head dan "0xff" untuk tail untuk setiap frame. HyBi 10 kini menggunakan format baru seperti berikut:
      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-------+-+-------------+-------------------------------+
     |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
     |I|S|S|S|  (4)  |A|     (7)     |             (16/63)           |
     |N|V|V|V|       |S|             |   (if payload len==126/127)   |
     | |1|2|3|       |K|             |                               |
     +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
     |     Extended payload length continued, if payload len == 127  |
     + - - - - - - - - - - - - - - - +-------------------------------+
     |                               |Masking-key, if MASK set to 1  |
     +-------------------------------+-------------------------------+
     | Masking-key (continued)       |          Payload Data         |
     +-------------------------------- - - - - - - - - - - - - - - - +
     :                     Payload Data continued ...                :
     + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
     |                     Payload Data continued ...                |
     +---------------------------------------------------------------+

Masalah keamanan telah diatasi

  • Sec-WebSocket-Key dan Sec-WebSocket-Accept ditambahkan sebagai pengganti tiga kunci HyBi 00. Browser memberikan angka yang dihasilkan secara acak ke Sec-WebSocket-Key. Kemudian, server menggunakannya dengan GUID khusus protokol WebSocket (258EAFA5-E914-47DA-95CA-C5AB0DC85B11) serta SHA1 / BASE64, dan sebagainya untuk menampilkan Sec-WebSocket-Accept sehingga browser dapat mengonfirmasi bahwa browser memahami WebSocket. Hal ini mencegah serangan lintas protokol.
  • Pada setiap frame, penyamaran frame kini diperlukan. Hal ini mencegah keracunan cache pada proxy. Sec-WebSocket-Origin ditambahkan untuk mencegah akses dari skrip yang tidak diketahui oleh penyedia layanan.
  • Sec-WebSocket-Origin ditambahkan sebagai pengganti kunci Origin HyBi 00 untuk mencegah akses dari skrip yang tidak diketahui oleh penyedia layanan. Perhatikan bahwa ini hanya akan menjadi "Origin" di HyBi 11.

Perubahan JS API

  • subprotocol kini dapat berupa array, yang memungkinkan tanda tangan metode new WebSocket(String url, Array subprotocol)
  • Atribut .protocol [String]
  • Atribut .binaryType [Blob|ArrayBuffer]
  • .extension [String]
  • Kode status dan alasan (alasan koneksi ditutup) telah ditambahkan ke CloseEvent. Fungsi close() juga telah diubah untuk menerima kedua argumen ini.

Ekstensi

  • Sec-WebSocket-Extensions ditambahkan. Ekstensi yang diusulkan adalah:
  • deflate-frame membuat frame dikompresi di sumber dan diekstrak di tujuan.
  • x-google-mux untuk mendukung multiplexing, tetapi masih dalam tahap awal.

Apakah ada kompatibilitas antara HyBi 00 dan HyBi 10 pada implementasi server dan browser?

  • Implementasi server dapat mendukung HyBi 00 dan HyBi 10 dengan melihat header HTTP handshake. Namun, sebaiknya jangan mendukung HyBi 00 karena diketahui rentan.
  • WebSocket JavaScript API sebagian besar mirip antara versi lama dan baru. Namun, seperti yang disebutkan di atas, sebaiknya jangan mendukung HyBi 00 karena diketahui rentan.

Browser mana yang mendukung HyBi 10?

  • Chrome 14 mendukung protokol HyBi 10 meskipun perubahan WebSocket JavaScript API yang disebutkan di atas masih dalam proses. Firefox 7 juga direncanakan untuk mendukung HyBi 10.