客户端服务器通信中的“HTTP 101 协议切换”如何工作?

客户端服务器通信中的“HTTP 101 协议切换”如何工作?

NGINX我正在开发一个由安装在 Linux 平台上的Web 服务器提供服务的网站。该网站提供的服务之一是基于WebSocket后端服务器。

更具体地说,NGINX 配置规定,当 NGINX 从客户端接收到以下类型的请求时:

GET /websockify HTTP/1.1

请求被重定向(代理)到WebSocket后端服务器。这些配置是通过以下设置块实现的:

location /websockify {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

嗅探Wireshark我看到客户端发送了一个HTTP请求,HTTP请求中包含以下2个标头:

Connection: Upgrade
Upgrade: websocket

NGINX 发送以下类型的 HTTP 响应:

101 Swiching Protocols

之后(根据 Wireshark 信息),通信从 HTTP 切换到称为WebSocket我不知道。

有时,我的 Firefox 浏览器(在这种情况下显然是作为客户端工作)会停止工作,并且无法与 WebSocket 后端服务器建立连接。

为了确保网站配置中不存在一些错误,我想问一下:协议切换是由浏览器实现的吗?切换之后,浏览器开始以与切换之前不同的方式发送数据?

感谢有关此主题的所有其他信息。

谢谢

答案1

WebSocket 维基百科页面似乎有一个很好的概述,并且在页面的更下方,描述了客户端和服务器代码用于将协议从 HTTP 切换到 WebSocket 的握手。

相关内容