2012-09-13 80 views
1

是否可以在沒有握手請求的情況下在java代碼中創建websocket連接?通過java客戶端的netty websocket連接

我知道如何創建一個使用一個handhsake要求如下:

String request = "GET " + path + " HTTP/1.1\r\n" 
      + "Upgrade: WebSocket\r\n" + "Connection: Upgrade\r\n" 
      + "Host: " + host + "\r\n" + "Origin: " + origin + "\r\n" 
      + extraHeaders.toString() + "\r\n"; 

但我想Ø避免上述問題,有一次我打開一個套接字連接,只是想發送幀下跌通道? .. 這可能嗎?

回答

3

如果沒有WebSocket握手,您無法創建WebSocket連接。 WebSocket握手和組幀是協議的關鍵部分。握手與HTTP兼容,並允許WebSockets更輕鬆地與現有Web基礎結構進行交互。除其他外,握手添加了安全機制並允許跨源資源共享(CORS)。

握手後,每個WebSocket幀仍然不是原始數據。 WebSocket是基於消息的協議,因此幀頭包含消息描述,幀長度,消息類型(二進制,文本,ping等)等。此外,從客戶端(瀏覽器)到服務器的數據必須使用正在運行的異或面具。這是爲了避免HTTP中介(代理,HTTP緩存等)中的理論漏洞。

不要被名稱中的「套接字」誤導。 WebSockets具有原始TCP套接字的許多優點,例如全雙工,雙向,長壽命和低延遲,但它是一種基於消息的傳輸協議,它基於原始TCP套接字並使用HTTP友好握手。

查看官方IETF 6455 WebSocket spec瞭解更多詳情。

相關問題