HTTP的Upgrade头部用于在HTTP请求和响应中通知客户端和服务器,通信协议正在从当前的HTTP协议转换到另一个协议。它的作用是支持在随后的请求和响应中使用不同的协议,比如从HTTP/1.1协议升级到WebSocket协议。
Upgrade请求头部例子:
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
这个请求头告诉服务器,客户端要将HTTP协议升级到WebSocket协议,在升级请求头中同时传输了一些WebSocket需要的信息,比如Secret key。
如果服务器支持WebSocket升级,它应该返回一个相应的Upgrade头部示例:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
这个响应头告诉客户端,服务器支持WebSocket协议升级,HTTP协议已经成功升级成为WebSocket协议,同时传输了一些WebSocket需要的信息,比如计算过的答案。
在实战中,HTTP Upgrade头部被广泛用于实现双工通信,具有告知服务器将当前HTTP连接以另一种协议重建的优点。例如,Google使用的SPDY协议就是基于HTTP Upgrade头部。此外,可以使用升级机制切换到不同的协议来实现功能,例如从HTTP升级到HTTPS。