什么是HTTP升级?

28

这是Node http events之一。我做了显而易见的谷歌搜索,但没有找到太多信息。它到底是什么?


您的链接指向文档的目录。 - Ed S.
非常抱歉,已经修改了。 - Randomblue
1个回答

35

HTTP Upgrade 用于指示希望或需要切换到不同版本的HTTP或其他协议,如果可能的话:

The Upgrade general-header allows the client to specify what additional communication protocols it supports and would like to use if the server finds it appropriate to switch protocols. The server MUST use the Upgrade header field within a 101 (Switching Protocols) response to indicate which protocol(s) are being switched.

   Upgrade        = "Upgrade" ":" 1#product

For example,

   Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

The Upgrade header field is intended to provide a simple mechanism for transition from HTTP/1.1 to some other, incompatible protocol.

根据IANA注册表,仅有3个注册提及它(其中一个在HTTP规范中)。
另外两个是:
- 在HTTP/1.1中升级到TLS(几乎从不使用,不要与广泛使用的定义HTTPS的HTTP over TLS混淆)。此升级允许类似于其他协议中的STARTTLS机制(例如LDAP、SMTP等),以便能够在相同端口上切换到TLS,在交换一些应用程序协议消息后,而不是在SSL/TLS之上进行整个HTTP交换,而无需知道它正在使用TLS(HTTPS的工作方式)。 - 升级到WebSockets(仍为草案)。

哇,非常详尽。非常感谢! - Randomblue
@Bruno,自定义升级协议是如何工作的?例如,如果我们的服务器想要支持Upgrade: firepresence这个自定义协议,我们该如何让浏览器发送升级请求呢? - Pacerier
@Pacerier 我不确定。我猜你需要大幅改变浏览器本身(或者如果可能的话编写一个插件/扩展),有点像为Websockets所做的那样。 - Bruno
根据第6.7节,“升级不能用于坚持协议更改”的规定,@Bruno的偏好或要求更多是“嘿,如果可以的话,请使用这些协议,因为它们更好”,而不是强制性的偏好或要求。 - Qix - MONICA WAS MISTREATED

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接