首頁 >web前端 >js教程 >如何在 JavaScript 中為 WebSocket 用戶端連線新增自訂 HTTP 標頭(例如授權)?

如何在 JavaScript 中為 WebSocket 用戶端連線新增自訂 HTTP 標頭(例如授權)?

Patricia Arquette
Patricia Arquette原創
2024-11-30 08:13:14671瀏覽

How Can I Add Custom HTTP Headers, Such as Authorization, to a WebSocket Client Connection in JavaScript?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn