我不明白这一点,当我们输入URL时,如何强制浏览器包含host
标头?根据我的观察,访问某些URL时,将包含host
标头,但没有。
访问stackoverflow的示例如下:
我不明白,我们如何控制其行为以包含host
名称?如果我有多个使用相同IP的子域,则无法区分我要访问哪个应用。
答案 0 :(得分:4)
Stackoverflow使用HTTP / 2,它使用:authority 标头而不是 host 。如果您在右侧滚动,则可以看到它。
有关更多信息,请参见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地址上。 “