如何强制浏览器http请求中包含“主机”标头

GMs*_*soF 2 browser https http httprequest http-headers

我不明白,host输入网址时如何强制浏览器包含标头?根据我的观察,访问某些URL时host将包含标头,但不包含标头。

如下访问stackoverflow的示例:

在此处输入图片说明

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

Jos*_*ley 5

Stackoverflow使用HTTP / 2,它使用:authority标头而不是host。如果您在右侧滚动,则可以看到它。

stackoverflow.com的标题

有关更多信息,请参见RFC7540

“为了确保可以正确再现HTTP / 1.1请求行,从具有原始或星号形式请求目标的HTTP / 1.1请求进行转换时,必须忽略此伪标题字段。直接生成HTTP / 2请求的客户端应该使用“:authority”伪头字段而不是主机头字段,如果请求中不存在一个将请求从HTTP / 2请求转换为HTTP / 1.1的中介,则该中介必须创建一个主机头字段,方法是复制“:authority”伪标题字段。”

如果我有多个使用相同IP的子域,则无法区分我要访问哪个应用。

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

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

“在HTTP站点上,服务器使用HTTP HOST标头确定应显示的HTTP网站。但是,在使用TLS(HTTPS背后的协议)时,需要先建立安全会话,然后才能建立HTTP会话,直到此为止,没有主机头。

...

服务器名称指示(SNI)是TLS协议的扩展。客户端使用TLS握手中的SNI扩展名指定要连接的主机名。这允许服务器(例如Apache,Nginx或诸如HAProxy之类的负载平衡器)从列表或数据库中选择建立连接所需的相应私钥和证书链,同时将所有证书托管在一个IP地址上。 ”