我读过有关 HTTP/HTTPS 性能的文章,发现 HTTPS 由于加密过程而增加了相当大的开销。我想知道,通过 HTTP 加载非敏感内容(如公共图像、脚本、样式表等)以避免额外开销是否是个好主意(并且可能吗)。
我在网上读到过这方面的信息,但找不到太多,尝试从 HTTP 服务器加载 HTTPS 网站上的图像,发现请求的 URL 是 HTTPS,尽管我使用了http
。src
那么有办法吗?
最重要的是,这安全吗?谢谢。
答案1
不,这不是一个好主意,因为这不安全。我们称之为混合内容:
当初始 HTML 通过安全的 HTTPS 连接加载,但其他资源(如图像、视频、样式表、脚本)通过不安全的 HTTP 连接加载时,就会出现混合内容[...]
使用不安全的 HTTP 协议请求子资源会削弱整个页面的安全性,因为这些请求容易受到路径攻击,攻击者可以窃听网络连接并查看或修改双方之间的通信[...]
HTTP 不安全。请始终使用 HTTPS。
答案2
通过 HTTP 侧载静态内容的另一个问题是,当其余连接为 HTTPS 时,HSTS(HTTP 严格传输安全)的设计明确禁止这样做,否则攻击者可能会使用 HTTP 向您展示网站的虚假版本,而您却一无所知。
HSTS 的工作原理是告诉网络浏览器某个特定网站使用 HTTPS,并且只使用 HTTPS,并将此结果缓存一段时间(通常是 6 个月左右)。这样,浏览器将不会在此缓存时间内接受使用 HTTP 连接到同一域的连接。此外,域所有者可能会将其域发布到浏览器中包含的 HSTS 预加载列表中,这实际上意味着更改是永久性的。启用 HSTS 的网站也被禁止通过 HTTP 链接到内容,因此浏览器将拒绝获取不安全的内容。
答案3
使用 HTTP 而不是 HTTPS 恰恰意味着连接不安全。您将面临的一个问题是,如果安全交付的页面包含不安全元素,大多数浏览器都会发出警告。
通过管道化请求可以减少加密的开销,这在 HTTPS 中是可能的,但在 HTTP 中则不行,因此从最终用户的角度来看,您通常不会期望普通网页受到很大的影响。
答案4
根据我的观点和专业经验,绝对是的。
当预计游客数量非常多并且能源效率非常重要时它非常有用。
您应该通过 HTTPS 托管您的 html 和 javascript,但 css、图像和其他静态文件可以通过 http 托管。
(切勿在同一个域名上同时使用 http 和 https 托管内容,因为这会允许计算您的 SSL 密钥)
您在 Web 服务器上配置哪些 HTTP 标头来启用/禁用可用的安全设置是另一个问题。您不会为此类设置启用 HSTS 或基本混合内容检查。
如果希望减少 HTTPS 请求的数量,您还可以使用“数据 URI”(如“data:image/webp;base64”)将多个图像放入一个 CSS 中;这将显著增加带宽。您可以将图像放入“blob”(二进制)格式的后台加载 javascript 文件中;使用此选项,每个图像只会增加几个字节的带宽。对于非常常见的图像(如网站模板/菜单图标的一部分),这是一个更好的选择。最好的选择是通过 WS(或 WSS,客户端和服务器之间的单一安全连接)“推送”登录页面所需的数据和流式传输图像(当前不在客户端缓存中)。