我一直在玩Wireshark,我注意到在初始化https连接时某些网站的行为有所不同。我正在测试的第一个网站是美国银行(Bank of America),当我将“bankofamerica.com”输入我的地址栏时,它的表现完全符合我的预期。
控制流程如下:
这正是我期望发生的事情。但是,当我将“facebook.com”输入我的地址栏时,发生了以下情况:
即使我没有在地址栏中指定HTTPS,连接如何能够跳过HTTP请求?我已经尝试清除我的浏览器缓存,重置我的路由器,甚至查看DNS RFC以查看是否有一些“仅https”标志(正如我预期的那样,没有)。
当我使用netcat时,我能够永久性地生成301 Moved(但不是http://www。不是https://www。)
nc facebook.com 80\n
GET / HTTP/1.0\n\n
但我不知道(即使在删除我的缓存后)它是如何在浏览器连接中跳过http部分的。我担心我不了解http / https如何工作的基本部分。任何帮助将不胜感激。
由于
答案 0 :(得分:1)
最可能的原因是您在过去的某个时间使用该浏览器访问过Facebook并且Facebook服务器返回了HTTP严格传输安全性(HSTS)标头。
一旦网站返回了设置为Strict-Transport-Security
的回复,即使您在浏览器中使用http://
前缀,浏览器也会始终直接进入HTTPS。我在自己的私人网站上尝试使用HSTS时发现了这一点,并发现在设置HSTS设置后很难找到一些浏览器(Firefox我看着你)。