以下是我理解的当用户尝试访问支持HTTP和HTTPS的服务器时发生的情况:
1. 客户端用户代理(例如Web浏览器,但不仅限于此)向http://my.domain.com发送请求。 2. 服务器在端口80上接收请求,并将永久重定向(代码301)发送到https://my.domain.com。 3. 客户端用户代理接收响应。鉴于状态代码,它将相同的请求发送到https://my.domain.com。 4. 服务器在端口443上接收请求并发送所需内容。
因此,在步骤1和2之间,如果请求包含敏感数据,则中间人可能会恢复未加密的请求。
如果客户端使用Web浏览器,则此浏览器将缓存301重定向,并且下一次客户端使用HTTP发送请求时,它将自动改为使用HTTPS发送。但是,如果客户端经常清除缓存呢?或者使用另一个用户代理而不是Web浏览器,该用户代理不存储永久重定向?在这种情况下,我们不会失去HTTPS的好处吗?具体案例:REST API和请求包含敏感数据。此API可以从任何HTTP客户端(在线,嵌入软件或网站,独立)调用。在这种情况下,禁用服务器级别上的HTTP支持以强制使用HTTPS是否更好?