gpt4 book ai didi

websocket - 响应 WebSocket 升级请求

转载 作者:行者123 更新时间:2023-12-03 16:40:51 30 4
gpt4 key购买 nike

我有一个 WebSocket 服务器,可以从不同的客户端获取 WebSocket 升级请求。根据请求的查询或路径参数,有时服务器需要拒绝这些升级请求。服务器需要取消握手不是因为它不支持协议(protocol)或客户端违反协议(protocol),而是因为提到的其他原因。
在这种情况下是否有标准状态码可以响应? specification似乎没有为这种情况定义响应状态代码。 Here还提到如果客户端违反协议(protocol),则服务器应以“400 Bad Request”响应,但如果服务器出于其他原因只想取消握手,则未提及要发送的响应。
服务器可以在不违反协议(protocol)的情况下选择带有任何状态码的响应吗?

最佳答案

对于这些 url,允许服务器响应,就好像它对 WebSockets 一无所知。所以一个普通的 400 错误是完全可以的。而且您不需要在正文中显示任何进一步的信息,或添加任何进一步的标题。

在较大的服务器设置中,通常有一个反向代理接受每个传入的请求,并根据 URL 将此请求转发到相应的应用程序,如果基于 HTTP 的协议(protocol)要求该反向代理具有了解所有协议(protocol)。

Once the client's opening handshake has been sent, the client MUST wait for a response from the server before sending any further data. The client MUST validate the server's response as follows:

  1. If the status code received from the server is not 101, the client handles the response per HTTP [RFC2616] procedures.


400错误描述为:

6.5.1. 400 Bad Request

The 400 (Bad Request) status code indicates that the server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).



这也将匹配不支持该协议(protocol)的 url 的升级请求。

4xx 错误代码定义如下:

6.5. Client Error 4xx

The 4xx (Client Error) class of status code indicates that the client seems to have erred. Except when responding to a HEAD request, the server SHOULD send a representation containing an explanation of the error situation, and whether it is a temporary or permanent condition. These status codes are applicable to any request method. User agents SHOULD display any included representation to the user.



因此,具有 400 状态且没有更多信息的响应是有效的,因为这些是可选的。

关于websocket - 响应 WebSocket 升级请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50265877/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com