对于HTTP,可以使用301响应将所有请求升级到HTTPS。
然而,对于websocket,它似乎并不那么容易。如果我将ws://127.0.0.1请求重定向到wss:/127.0.0.1,我在浏览器中使用websocket.org上的测试得到“错误:未定义”(是的,证书是可信的,适用于wss如果直接使用)。发出初始请求,并发送重定向。但是,TLS端口上没有第二个请求。
规范仅涵盖重定向。
答案 0 :(得分:1)
这取决于webSocket客户端实现是否处理3xx状态代码。 webSocket specification不需要客户端实现。以下是该规范的引用:
如果从服务器收到的状态代码不是101,那么 客户端处理每个HTTP [RFC2616]过程的响应。在 特别是,客户端可能会执行身份验证 收到401状态代码;服务器可能会重定向客户端 使用3xx状态代码(但客户不需要遵循 否则,按以下步骤进行操作。
答案 1 :(得分:1)
对于HTTP,可以使用301响应将所有请求升级到HTTPS。
(挑剔)这不是对请求的升级,而是重定向导致不同的请求。
是否可以升级ws?
根据websocket standard (RFC 6455):
如果从服务器收到的状态代码不是101,那么 客户端处理每个HTTP [RFC2616]过程的响应。在 特别是,客户端可能会执行身份验证 收到401状态代码; 服务器可能会重定向客户端 使用3xx状态代码(但客户不需要遵循 他们)等
所以是的,它可能会得到一些客户的支持,但不受其他客户的支持。例如,在Firefox中,相关属性network.websocket.auto-follow-http-redirects
默认为false,即默认情况下不会遵循重定向。
即使使用重定向响应,是否还需要发送特定于WebSocket的标头?
这些仅与将请求升级到websocket而非重定向有关。这意味着标头只应在升级响应中发送(状态码101)。