如何强制浏览器HTTP请求中包含“host”头部信息

5

我不明白这个问题,我们如何强制浏览器在输入网址时包含host头信息?根据我的观察,在访问某些 URL 时,host 头信息会被包含,但有些则不会。

以访问 stackoverflow 为例:

enter image description here

我不明白如何控制其行为来包含 host 名称。假如我有多个子域名使用相同的 IP,则无法区分我要访问哪个应用。

1个回答

11

Stackoverflow使用HTTP/2协议,该协议使用:authority头部字段代替host。如果您在右侧向上滚动,就可以看到它。

Headers for stackoverflow.com

详见RFC7540

"为确保HTTP/1.1请求行的准确重现,当从一个带有源或星号形式请求目标的HTTP/1.1请求转换时,必须省略此伪头字段。直接生成HTTP/2请求的客户端应该使用" :authority" 伪头字段代替Host头字段。将HTTP/2请求转换为HTTP/1.1的中间代理,如果请求中没有Host头字段,则必须通过复制":authority"伪头字段的值来创建一个Host头字段。"

如果我有多个子域名使用相同的IP地址,就无法区分要访问哪个应用程序了。

Stackoverflow还使用HTTPS。Web服务器可以根据TLS握手中传递的SNI扩展路由到正确的域名。

https://www.globalsign.com/zh-cn/blog/what-is-server-name-indication/

在HTTP站点上,服务器使用HTTP HOST头来确定应呈现哪个HTTP网站。但是,在使用TLS(HTTPS背后的协议)时,需要创建安全会话才能建立HTTP会话,在此期间,没有可用的主机头。

...

服务器名称指示(SNI)是TLS协议的扩展。客户端使用TLS握手中的SNI扩展指定要连接的主机名。这使得服务器(例如Apache、Nginx或负载均衡器,如HAProxy)可以从列表或数据库中选择相应的私钥和证书链以建立连接,并在单个IP地址上托管所有证书。


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