WebSocket服务器应该只处理GET请求吗?

时间:2018-05-17 07:57:56

标签: websocket

我编写了一个WebSocket服务器,它只处理作为GET请求的升级请求。如果POST或任何其他类型的请求带有所需的标头,它将由HTTP服务器处理。

specification中没有明确说明WebSocket升级请求应该是GET请求。 如果升级请求不是GET请求,服务器应该将其作为WebSocket升级请求处理,是否应该将其传递给HTTP服务器处理,还是应该使用状态代码400 Bad Request来响应?

这可能是设计决策,服务器决定不处理非GET请求的方法吗?

1 个答案:

答案 0 :(得分:1)

来自webSocket规范的section 4.1(客户端要求),它说:

  

请求的方法必须是GET,HTTP版本必须           至少为1.1

然后,在后来的section 4.2.1(阅读客户的开放式握手)webSocket规范中,它说:

  

客户的开放握手由以下部分组成。如果      服务器在读取握手时发现客户端确实如此      不发送与下面描述相符的握手(注意为      根据[RFC2616],标题字段的顺序并不重要),      包括但不限于任何违反ABNF语法的行为      为握手的组件指定,服务器必须停止      处理客户端的握手并返回一个HTTP响应      适当的错误代码(例如400 Bad Request)。

     
      
  1. HTTP / 1.1或更高版本的GET请求,包括" Request-URI"       [RFC2616]应该被解释为/资源名称/       第3节中定义的(或包含的绝对HTTP / HTTPS URI)       /资源名称/).
  2.   

因此,有多个地方说http请求必须是GET。

至于你的具体问题:

  

WebSocket服务器是否只处理GET请求?

是的,webSocket连接始终以GET请求开始,而不是POST或任何其他方法。

  

如果升级请求不是GET请求,服务器应该将其作为WebSocket升级请求处理,是否应该将其传递给HTTP服务器处理,还是应该使用状态代码400 Bad Request?来响应它? / p>

如上述参考部分所述,服务器应使用400 Bad Request等状态代码进行响应。

  

这可能是设计决策,服务器决定不处理非GET请求的方法吗?