如今,大多数网站都会将 HTTP 流量重定向到 HTTPS 以处理对其页面的请求。但是对于资产(图像、js、css)却并非如此。大多数资产都可在 HTTP 和 HTTPS 下使用。是否有任何特殊原因导致通过 HTTP 访问资产不会像对页面的请求那样重定向?为什么不强制所有地方都使用 HTTPS?
答案1
确实,HTTPS 网页内的资产也应该通过 HTTPS 提供,但有理由不尝试强制 Web 服务器将该域的所有传入 HTTP 请求都推送到 HTTPS,而是继续允许 HTTP 访问。
- 作为 https 配置失误的预防措施
- 支持不支持 https 的客户端
- 倾向于将通过 HTTPS 提供的 HTML 中的资产的 HTTPS 强制执行留给应用程序层,而不要尝试在服务器配置层强制执行
这个问题在运行Certbot/让我们加密用于创建免费 HTTPS SSL 证书和配置 Nginx 或 Apache Web 服务器的工具。Web 服务器提供强制请求 http 的客户端重定向到 https 版本的机制。
对于一般用途,允许重定向到 https 并强制使用 https 可能是最安全、最简单的方法。但请记住,有些情况下可能需要偏离此默认设置。
答案2
资产不应通过 HTTP 包含在 HTTPS 页面中或被引用。或者换一种说法:
如果你建立一个通过 HTTPS 加载的网站全部其内容必须通过 HTTPS 加载的网页也一样。这包括 CSS、JS、图像等,甚至不在同一域中的远程内容。
如果不是这种情况,任何现代浏览器都会通知用户该网站由于使用混合内容而不安全。
网站提供商可能会考虑在自行加载这些元素时不强制从 HTTP 切换到 HTTPS。这可能是为了有一个后备方案,不强制从一开始就使用 HTTP 的网站用户通过 HTTPS 加载资产。
虽然我不知道这怎么会发生,因为所有通过 HTTP 访问网站的用户都会被重定向到 HTTPS。无论如何......做出了一个奇怪的决定,可能是在 HTTPS 采用的早期阶段,他们可能坚持这个奇怪的决定。