WebSocket 用戶端API 中的HTTP 標頭
使用支援此功能的任何HTTP 標頭用戶端將自訂HTTP 標頭新增至WebSocket 用戶端似乎很容易,但無法找到如何使用網路平台的WebSocket API 執行此操作。
有人知道如何實現它嗎?
具體來說,需要能夠傳送 HTTP 授權標頭。
更新
JavaScript WebSockets API 中沒有方法用於指定客戶端/瀏覽器將發送的附加標頭。 HTTP 路徑(「GET /xyz」)和協定標頭(「Sec-WebSocket-Protocol」)可以在 WebSocket 建構子中指定。
Sec-WebSocket-Protocol 標頭(有時會擴展用於在特定於 WebSocket 的身份驗證)是從 WebSocket建構函式的選用第二個參數產生的:
以上程式碼會導致以下標頭:
和
實作WebSocket身份驗證/授權的常見模式是實施票證系統,其中託管WebSocket 用戶端的頁面從伺服器請求票證,然後在WebSocket連線設定期間傳遞此票證,方法是在 URL/查詢字串中,在協定欄位中,或在建立連線後將其指定為第一則訊息。然後,只有當票證有效時(存在、尚未使用、票證中編碼的客戶端 IP 匹配、票證中的時間戳較新等),伺服器才會允許連線繼續。以下是 WebSocket 安全性資訊的摘要:https://devcenter.heroku.com/articles/websocket-security。
基本驗證以前曾是一種選擇,但這已棄用,即使指定了此標頭,現代瀏覽器也不會發送它。
基本身份驗證資訊(已棄用- 不再起作用):
授權標頭是從WebSocket URI 的用戶名和密碼(或僅用戶名)字段產生的:
以上程式碼產生帶有base64編碼字串「username:password」的以下標頭:
已在Chrome 55 和Firefox 50 中測試了基本身份驗證,並驗證了確實與伺服器協商了基本身份驗證資訊(這可能不適用於Safari)。
感謝 Dmitry Frank 提供基本驗證答案。
以上是如何在 JavaScript 中為 WebSocket 用戶端連線新增自訂 HTTP 標頭(例如授權)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!