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

时间:2018-10-26 09:06:09

标签: http browser https http-headers httprequest

我不明白这一点,当我们输入URL时,如何强制浏览器包含host标头?根据我的观察,访问某些URL时,将包含host标头,但没有。

访问stackoverflow的示例如下:

enter image description here

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

1 个答案:

答案 0 :(得分:4)

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

Headers for stackoverflow.com

有关更多信息,请参见RFC7540

“”为确保可以正确重现HTTP / 1.1请求行,从具有原始或星号形式请求目标的HTTP / 1.1请求进行转换时,必须忽略此伪标头字段。直接生成HTTP / 2请求应该使用“:authority”伪头字段而不是Host头字段。如果HTTP中没有将HTTP / 2请求转换为HTTP / 1.1的中介,则必须创建一个Host头字段。通过复制“:authority”伪标题字段的值来请求。”

  

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

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

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

”在HTTP站点上,服务器使用HTTP HOST标头确定应显示的HTTP网站。但是,在使用TLS(HTTPS背后的协议)时,需要在HTTP会话之前创建安全会话。可以建立,直到那时为止,没有主机头可用。

...

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

相关问题