将WebSockets升级为TLS



对于HTTP,可以通过301响应将所有请求升级为HTTPS。

对于websocket,然而,它似乎不那么容易。如果我将ws://127.0.0.1请求重定向到wss:/127.0.0.1,使用websocket.org上的测试,我在浏览器中得到一个"错误:未定义"(是的,证书是受信任的,如果直接使用则适用于wss)。发出初始请求,并发送重定向。但是,在TLS端口上没有第二个请求。

规范只简要介绍了重定向。

  • 可以将ws升级到wss吗?
  • 我需要发送WebSocket特定的头甚至重定向响应?(目前,我没有-规范列出了在完成握手之前重定向)
  • 还有什么我想念的吗?

对于HTTP,可以通过301响应将所有请求升级为HTTPS。

(nitpick)这不是一个真正的请求升级,而是一个重定向,导致一个不同的请求。

可以将ws升级到wss吗?

根据websocket标准(RFC 6455):

如果从服务器接收到的状态码不是101,则客户端根据HTTP [RFC2616]过程处理响应。在特别是,客户端可能执行身份验证,如果它接收401状态码;服务器可能重定向客户端使用3xx状态码(但客户端不需要遵循)) 等。

所以是的,它可能被一些客户端支持,但不被其他客户端支持。例如,在Firefox中,相关属性network.websocket.auto-follow-http-redirects默认为false,即默认情况下它不遵循重定向。

我需要发送WebSocket特定的头甚至重定向响应?

这些只与升级到websocket的请求相关,而与重定向无关。这意味着头应该只在升级响应(状态码101)中发送。

这取决于webSocket客户端实现是否处理3xx状态码。webSocket规范不需要客户端实现这样做。以下是规范中的一段话:

如果从服务器接收到的状态码不是101,则客户端根据HTTP [RFC2616]过程处理响应。在特别是,客户端可能执行身份验证,如果它接收401状态码;服务器可能会重定向客户端使用3xx状态码(但客户端不需要遵循)),等等。否则,按以下步骤进行。

相关内容

  • 没有找到相关文章

最新更新