在 Go 中使用 WebSocket 客户端连接到服务器时,HTTP 请求中的 CORS 头部(如 Access-Control-Allow-Origin
)是由服务器响应控制的,而不是客户端请求中设置的。然而,如果你希望在建立 WebSocket 连接时携带一些自定义头信息(例如用于身份验证或其他目的),可以通过设置 http.Header
来实现。
以下是如何在 Go 的 WebSocket 客户端中添加自定义 HTTP 头的示例:
使用 gorilla/websocket
- 首先,确保你已经安装了
gorilla/websocket
包:
go get -u github.com/gorilla/websocket
- 然后,你可以像下面这样编写你的 WebSocket 客户端代码,以包含自定义头部:
package main
import (
"log"
"net/http"
"github.com/gorilla/websocket"
)
func main() {
url := "wss://your-websocket-url" // 替换为你的 WSS URL
// 创建一个 HTTP 请求,并添加自定义 Header
reqHeader := http.Header{}
reqHeader.Set("Origin", "https://example.com") // 设置 Origin 头
reqHeader.Set("Authorization", "Bearer your-token") // 示例:设置 Authorization 头
// 建立 WebSocket 连接
conn, _, err := websocket.DefaultDialer.Dial(url, reqHeader)
if err != nil {
log.Fatal("Dial:", err)
}
defer conn.Close()
// 可以发送消息
err = conn.WriteMessage(websocket.TextMessage, []byte("Hello, server!"))
if err != nil {
log.Println("Write:", err)
return
}
// 接收消息
_, message, err := conn.ReadMessage()
if err != nil {
log.Println("Read:", err)
return
}
log.Printf("Received: %s\n", message)
}
注意事项
CORS Headers: 请注意,CORS headers (
Access-Control-Allow-Origin
,Access-Control-Allow-Methods
, etc.) 是由服务器端设置的,不是在客户端请求中配置的。在这个示例中,我们手动设置了Origin
和Authorization
等自定义 HTTP headers,但真正处理 CORS 的还是服务器。WebSocket 握手: 在 WebSocket 揭示过程中,浏览器会根据所需的安全策略自动添加某些请求头,例如Origin。WebSocket 协议本身并不支持应用 CORS 检查。
确保你的服务器能正确处理这些自定义 header,然后尝试运行上述代码。这将允许你在与 WebSocket 服务器建立连接时附加所需的信息。如果有更多问题,请随时问我!
内容由零声教学AI助手提供,问题来源于学员提问