HTTP/2 `:authority`头是否需包含端口号?与Host头逻辑是否一致?
嘿,这个问题抓得很准,刚好能把HTTP/2的伪头和HTTP/1.x的Host头逻辑打通来说清楚~
核心结论
:authority头的端口号规则和HTTP/1.x的Host头完全一致,是否需要包含端口号,取决于请求使用的是不是协议的默认端口:
- 如果是默认端口(HTTPS为443,HTTP为80),
:authority不需要带端口; - 如果是非默认端口,必须明确带上端口号。
针对你的具体场景
当浏览器向https://server.com:1234/发起请求时,因为1234不是HTTPS的默认端口(443),所以:authority头的值应该是server.com:1234,而不是单纯的server.com。
规范依据
根据HTTP/2的官方规范(RFC 7540),
:authority伪头字段的作用等价于HTTP/1.x中的Host头字段,并且严格遵循相同的语法规则。它的核心作用是让服务器识别请求要路由到哪个虚拟主机/服务实例,因此必须完整传递主机名和非默认端口信息(如果存在)。
简单来说,HTTP/2只是把原来HTTP/1.x请求行里的主机信息,移到了:authority这个伪头里,职责完全没变,所以之前关于Host头的端口规则,直接套用到:authority上就对了。
内容的提问来源于stack exchange,提问作者ioquatix
相关产品推荐
相关产品推荐

