1. 2.4 URL
      1. 2.4.1 术语
      2. 2.4.2 CORS 设置属性
      3. 2.4.3 Referrer 策略属性
      4. 2.4.4 Nonce 属性
      5. 2.4.5 延迟加载属性
      6. 2.4.6 阻止属性
      7. 2.4.7 获取优先级属性

2.4 URL

2.4.1 术语

如果一个字符串是 有效的 URL 字符串 但不是空字符串,则它是一个 有效的非空 URL

如果一个字符串在 去除其开头和结尾的 ASCII 空格 后,是一个 有效的 URL 字符串,则它是一个 可能被空格包围的有效 URL

如果一个字符串在 去除其开头和结尾的 ASCII 空格 后,是一个 有效的非空 URL,则它是一个 可能被空格包围的有效的非空 URL

本规范将 URL about:legacy-compat 定义为一个保留的,尽管无法解析的, about: URL,用于在 HTML 文档 中的 DOCTYPE 中,当需要与 XML 工具兼容时使用。 [ABOUT]

本规范将 URL about:html-kind 定义为一个保留的,尽管无法解析的, about: URL,它用作媒体轨道类型的标识符。 [ABOUT]

本规范将 URL about:srcdoc 定义为一个保留的,尽管无法解析的, about: URL,它用作 iframe srcdoc 文档URL[ABOUT]

Document 对象 document回退基准 URL 是通过执行以下步骤获得的 URL 记录

  1. 如果 documentiframe srcdoc 文档,那么

    1. 断言documentabout 基准 URL 不为空。

    2. 返回 documentabout 基准 URL

  2. 如果 documentURL 匹配 about:blank 并且 documentabout 基准 URL 不为空,则返回 documentabout 基准 URL

  3. 返回 documentURL

Document 对象的 文档基准 URL 是通过执行以下步骤获得的 URL 记录

  1. 如果在 Document 中没有 base 元素具有 href 属性,则返回 Document回退基准 URL

  2. 否则,返回 Document 中第一个具有 href 属性的 base 元素的 冻结基准 URL,按 树序


如果一个 URL方案 是 "about",其 路径 包含单个字符串 "blank",其 用户名密码 为空字符串,其 主机 为空,则该 URL 匹配 about:blank

这样的 URL 的 查询片段 可以不为空。例如,通过 解析 "about:blank?foo#bar" 创建的 URL 记录 匹配 about:blank

如果一个 URL方案 是 "about",其 路径 包含单个字符串 "srcdoc",其 查询 为空,其 用户名密码 为空字符串,其 主机 为空,则该 URL 匹配 about:srcdoc

确保 匹配 about:srcdocURL查询 为空的原因是,无法创建其 URL 具有非空 查询iframe srcdoc 文档,这与那些 URL 匹配 about:blankDocument 不同。换句话说,所有 匹配 about:srcdocURL 仅在它们的 片段 上有所不同。

2.4.2 CORS 设置属性

属性/crossorigin

在所有当前引擎中支持。

Firefox8+Safari6+Chrome13+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

CORS 设置属性 是一个具有以下关键字和状态的 枚举属性

关键字状态简要说明
anonymous 匿名 元素的 请求 将将其 模式 设置为 "cors",并将它的 凭据模式 设置为 "same-origin"。
(空字符串)
use-credentials 使用凭据 元素的 请求 将将其 模式 设置为 "cors",并将它的 凭据模式 设置为 "include"。

该属性的 缺失值默认值无 CORS 状态,其 无效值默认值匿名 状态。为了 反射 的目的,匿名 状态的 规范关键字anonymous 关键字。

大多数受 CORS 设置属性 控制的获取将通过 创建潜在的 CORS 请求 算法完成。

对于更现代的功能,其中请求的 模式 始终为 "cors",某些 CORS 设置属性 已被重新利用,具有略微不同的含义,即它们只影响 请求凭据模式。为了进行此转换,我们定义了 CORS 设置属性凭据模式,用于给定的 CORS 设置属性,由根据属性状态进行切换来确定

无 CORS
匿名
"same-origin"
使用凭据
"include"

2.4.3 Referrer 策略属性

Referrer 策略属性 是一个 枚举属性。每个 Referrer 策略,包括空字符串,都是该属性的关键字,映射到相同名称的状态。

属性的缺失值默认值无效值默认值都是空字符串状态。

这些状态对各种获取的处理模型的影响,在本规范、FetchReferrer Policy中都有更详细的定义。[FETCH] [REFERRERPOLICY]

多个信号可以影响给定获取使用的处理模型;引用者策略属性只是其中之一。一般来说,处理这些信号的顺序是

  1. 首先,检查是否存在noreferrer链接类型;

  2. 然后,检查引用者策略属性的值;

  3. 然后,检查是否存在任何带有meta元素,其name属性设置为referrer

  4. 最后,检查`Referrer-Policy` HTTP 头。

2.4.4 Nonce 属性

Global_attributes/nonce

在所有当前引擎中支持。

Firefox31+SafariYesChromeYes
Opera?EdgeYes
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

一个nonce内容属性表示一个加密的随机数(“一次性使用数字”),它可以被Content Security Policy用于确定是否允许给定的获取继续进行。该值是文本。[CSP]

具有nonce内容属性的元素确保加密随机数只暴露给脚本(而不是像 CSS 属性选择器这样的侧信道),方法是从内容属性中获取该值,将其移动到一个名为[[CryptographicNonce]]的内部插槽中,通过HTMLOrSVGElement接口混合暴露给脚本,并将内容属性设置为空字符串。除非另有说明,否则该插槽的值为空字符串。

element.nonce

返回为element的加密随机数设置的值。如果没有使用设置器,这将是最初在nonce内容属性中找到的值。

element.nonce = value

更新element的加密随机数的值。

HTMLElement/nonce

Firefox75+Safari🔰 10+Chrome61+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

nonce IDL 属性在获取时必须返回此元素的[[CryptographicNonce]]的值;在设置时,必须将此元素的[[CryptographicNonce]]设置为给定的值。

请注意,nonce IDL 属性的设置器不会更新相应的內容属性。这,以及在元素变得与浏览上下文相连时将nonce内容属性设置为空字符串,是为了防止通过可以轻松读取内容属性(如选择器)的机制来泄露随机数的值。在issue #2369中了解更多信息,该问题介绍了这种行为。

以下属性更改步骤用于nonce内容属性

  1. 如果element包含HTMLOrSVGElement,则返回。

  2. 如果localName不是noncenamespace不是 null,则返回。

  3. 如果value为 null,则将element[[CryptographicNonce]]设置为空字符串。

  4. 否则,将element[[CryptographicNonce]]设置为value.

每当一个包含HTMLOrSVGElement的元素包含变得与浏览上下文相连时,用户代理必须在element上执行以下步骤

  1. CSP listelement阴影包括根策略容器CSP list.

  2. 如果CSP list包含一个头文件传送的 Content Security Policy,并且element具有一个nonce内容属性attr,其值不是空字符串,那么

    1. nonceelement[[CryptographicNonce]].

    2. 设置属性值,对于element,使用"nonce"和空字符串。

    3. element[[CryptographicNonce]]设置为nonce.

    如果element[[CryptographicNonce]]没有被恢复,那么它此时将为空字符串。

对于包含HTMLOrSVGElement的元素,其克隆步骤必须将副本上的[[CryptographicNonce]]插槽设置为正在克隆的元素上的插槽的值。

2.4.5 延迟加载属性

Lazy_loading

在所有当前引擎中支持。

Firefox75+Safari15.4+Chrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

一个延迟加载属性是一个枚举属性,具有以下关键字和状态

关键字状态简要说明
lazy 延迟 用于推迟获取资源,直到满足某些条件。
eager 急切 用于立即获取资源;默认状态。

该属性指示用户代理立即获取资源,或者推迟获取,直到满足与该元素相关联的某些条件,这取决于该属性的当前状态。

该属性的缺失值默认值无效值默认值都是急切状态。


给定一个元素element将延迟加载元素步骤如下

  1. 如果脚本被禁用,则返回 false。

    这是一个反跟踪措施,因为如果用户代理在脚本被禁用时支持延迟加载,那么网站仍然可以通过在页面的标记中策略性地放置图像来跟踪用户在整个会话中的近似滚动位置,这样服务器就可以跟踪请求了多少图像以及何时请求了。

  2. 如果element延迟加载属性处于延迟状态,则返回 true。

  3. 返回 false。

每个imgiframe元素都有关联的延迟加载恢复步骤,最初为 null。

对于将延迟加载imgiframe元素,这些步骤从延迟加载交叉观察器的回调中运行,或者在它们的延迟加载属性设置为急切状态时运行。这会导致元素继续加载。

每个Document都有一个延迟加载交叉观察器,最初设置为 null,但可以设置为一个IntersectionObserver实例。

开始交叉观察一个延迟加载元素element,请运行以下步骤

  1. docelement节点文档.

  2. 如果doc延迟加载交叉观察器为 null,则将其设置为一个新的IntersectionObserver实例,初始化如下

    目标是使用IntersectionObserver构造函数的原始值。但是,我们被迫在本规范中使用 JavaScript 公开的构造函数,直到Intersection Observer暴露用于规范中的低级钩子。请参见跟踪此问题的 bug w3c/IntersectionObserver#464[INTERSECTIONOBSERVER]

  3. 使用 element 作为参数调用 doc延迟加载交叉观察器observe 方法。

    该意图是使用 observe 方法的原始值。参见 w3c/IntersectionObserver#464[INTERSECTIONOBSERVER]

停止交叉观察延迟加载元素 element,请运行以下步骤

  1. docelement节点文档

  2. 断言doc延迟加载交叉观察器 不为 null。

  3. 使用 element 作为参数调用 doc延迟加载交叉观察器unobserve 方法。

    该意图是使用 unobserve 方法的原始值。参见 w3c/IntersectionObserver#464[INTERSECTIONOBSERVER]

延迟加载滚动边距是 实现定义的 值,但应考虑以下建议

隐私 角度来看,延迟加载滚动边距不应泄露额外信息非常重要。例如,当前设备上的典型滚动速度可能会不精确,以免引入新的指纹向量。

2.4.6 阻塞属性

阻塞属性明确指示某些操作应阻塞对外部资源的获取。可以阻塞的操作由可能阻塞令牌表示,这些令牌是下表列出的字符串

可能阻塞令牌描述
"render"该元素为 潜在渲染阻塞

将来,可能会有更多 可能阻塞令牌

阻塞属性的值必须为 无序的、唯一的、以空格分隔的令牌集,每个令牌都是 可能阻塞令牌。阻塞属性最多只能有一个元素。任何元素最多只能有一个阻塞属性。

元素 el 的阻塞令牌集是以下步骤的结果

  1. valueel 的阻塞属性的值,如果不存在此类属性,则为一个空字符串。

  2. value 设置为 value转换为 ASCII 小写

  3. rawTokensvalue 在 ASCII 空白处拆分 的结果。

  4. 返回一个包含 rawTokens 中是 可能阻塞令牌 的元素的集合。

如果元素的阻塞令牌集包含 "render",或者如果元素为 隐式潜在渲染阻塞(将在各个元素中定义),则该元素为 潜在渲染阻塞。默认情况下,元素不会是 隐式潜在渲染阻塞

2.4.7 获取优先级属性

获取优先级属性是具有以下关键字和状态的 枚举属性

关键字状态简要说明
high high 表示相对于具有相同 目标 的其他资源而言,具有高优先级的 获取
low low 表示相对于具有相同 目标 的其他资源而言,具有低优先级的 获取
auto auto 表示相对于具有相同 目标 的其他资源而言,自动确定 获取 优先级。

该属性的 缺失值默认值无效值默认值 均为 auto 状态。