【问题标题】:Get full URL in WebSocket在 WebSocket 中获取完整的 URL
【发布时间】:2016-02-25 08:33:46
【问题描述】:

我正在使用 golang samples 之一来构建 WebSocket 服务器。根据示例,结构Client 访问websocket.Conn here 和websocket.Conn 有一个Request 方法返回*http.Request。

我的想法是根据用户用于进入应用的子域为用户订阅不同的频道。

那么是否可以获得用户在订阅 websocket 时点击的完整 URL?使用我认为ws.Conn.Request().URL.Host 的示例代码会给我类似ws://channel1.lvh.me:8080/sync 的东西,但我却得到了路径:“/chat”。

是否可以获得用户用于连接 websocket 的完整 URL?提前致谢。

【问题讨论】:

标签: go


【解决方案1】:

检查host header 以获取请求的主机:

host := c.Request().Host

Request.URL 字段是从 HTTP 请求 URI 解析的。对于大多数请求,请求 URI 仅包含路径和查询。

应用程序可以根据主机标头和应用程序所服务协议的知识重建完整的 URL。例如,如果应用程序正在侦听 HTTP 请求(或使用 HTTP 进行握手的 WS 请求),则完整 URL 为:

u := *c.Request().URL
u.Host = c.Request().Host
u.Scheme = "http"

【讨论】:

    【解决方案2】:

    func (*Conn) Request 返回*http.Request

    func (ws *Conn) Request() *http.Request
    

    检查http 包中的http.Request,您会发现它具有URL *url.URL 类型。这意味着您应该获得完整的网址:

    ws.Request().URL.Path
    

    【讨论】:

      猜你喜欢
      • 2011-10-09
      • 1970-01-01
      • 2015-01-19
      • 2019-04-08
      • 2012-04-28
      • 2015-03-11
      • 2016-07-05
      相关资源
      最近更新 更多