从安全页面链接到不安全页面

Links to insecure pages from a secure page

我知道当初始 HTML 通过安全的 HTTPS 连接加载,但其他资源(例如图像、视频、样式表、脚本)通过不安全的 HTTP 连接加载时,会出现混合内容。这称为混合内容,因为正在加载 HTTP 和 HTTPS 内容以显示同一页面,并且初始请求通过 HTTPS 是安全的。

是否允许安全页面包含指向不安全的外部页面的链接?我说的是将用户从安全页面导航到新的但不安全的页面的链接。内容未在安全页面上检索,所以没关系,对吗?

是的,根据 Mixed Content specification,这是定义浏览器关于潜在混合内容的规范要求的规范,允许安全页面包含 links 到外部不安全的页面。

具体的相关要求在规范Should fetching request be blocked as mixed content?部分第一部分的第4步中说明,内容如下:

Given a Request request, a user agent determines whether the Request request should proceed or not via the following algorithm:

  1. Return allowed if one or more of the following conditions are met:

    1. §5.1 Does settings prohibit mixed security contexts? returns "Does Not Restrict Mixed Security Contexts" when applied to request’s client.
    2. request’s url is a priori authenticated.
    3. The user agent has been instructed to allow mixed content, as described in §7.4 User Controls).
    4. request’s destination is "document", and request’s target browsing context has no parent browsing context.

      Note: We exclude top-level navigations from mixed content checks, but user agents MAY choose to enforce mixed content checks on insecure form submissions (see §7.5 Further Action).

换句话说,当用户关注 link 到外部页面时,该操作会启动顶级导航请求,并且根据上面的第 4 步,算法 returns allowed 对于这种情况,这意味着请求被允许。 (在规范定义为混合内容的情况下,算法改为 returns blocked,这意味着不允许请求。)

或者用不太规范但信息量更大的术语来说,浏览器会阻止对页面的任何嵌入式 子资源 的请求,这些请求不是从安全上下文提供的,但它们不会阻止 导航 到其他不安全的文档。

混合内容规范中隐含说明这些术语行为的相关部分位于 Introduction:

…when the encrypted and authenticated resource requests subresources (scripts, images, etc) over an insecure channel… Those resource requests result in a resource whose status is mixed