Web 浏览器如何知道目的地是 http 还是 https?

Ada*_*yah 11 browser

我使用 Wireshark 来分析网络流量。

当我打开 Web 浏览器并输入地址:stackexchange.com 时,它首先执行 DNS 查询,收到答复,然后将 TCP Syn 数据包发送到端口 80 上的正确 IP 地址。

但是当我输入 www.paypal.com 时,它会做同样的事情,但是 TCP Syn 数据包被直接发送到端口 443。

DNS 答案似乎不包括目标端口,我的浏览器和目标站点之间也没有任何协议协商。我的浏览器如何知道目标端口?

请注意,我没有输入http://stackexchange.comhttps://www.paypal.com,而只是输入 stackexchange.com 和 www.paypal.com 。

小智 7

您的浏览器会记住之前与站点交互的端口和协议。

Paypal 使用 HTTP 严格传输安全。这意味着服务器已经(可能通过端口 80)发送了一个响应头,包括Strict-Transport-Security:max-age=63072000在您开始查找之前。显示的年龄以秒为单位。因此,在访问端口 80 后的接下来两年内,浏览器不必再次访问端口 80;它应该转到端口 443。事实上,后续访问端口 443 将收到相同的指令,因此它无限期地适用于每年使用 Paypal 的人。

这是对先前方案的改进,其中对端口 80 的每个请求都重定向到端口 443,后者较慢。依赖重定向也不太安全,因为如果使用重定向,浏览器不会介意 Paypal(或者冒充 Paypal 的 MITM 攻击者)突然从 HTTPS 转换为 HTTP。在 HTTP Strict Transport Security 下,这种攻击最终会更加引人注目,因为攻击者将被迫使用 HTTPS 与浏览器通信,但他们无法访问任何颁发给 Paypal 的 HTTPS 服务器证书。

  • 知道了!我通过历史项目 www.paypal.com 的右键单击上下文菜单单击“忘记此站点”,然后重试该实验(访问 www.paypal.com 没有 http:// 或 https:// 前缀,使用 Wireshark听)。第一个请求是 HTTP。看起来你是对的。 (2认同)