recursal/MDN huggingface dataset:
Content-Security-Policy-Report-Only
===================================

HTTP \*\*`Content-Security-Policy-Report-Only`\*\*响应头允许 web 开发人员通过监测 (但不强制执行) 政策的影响来尝试政策。这些违反报告由 JSON 文档组成通过一个 HTTP POST 请求发送到指定的 URI。

更多相关信息，可参见这篇文章 Content Security Policy (CSP).

|  |  |
| --- | --- |
| Header 类型 | Response header |
| Forbidden header name | no |
| 这个 header 不支持在 `<meta>` 元素内（定义）。 |

语法
--
```

Content-Security-Policy-Report-Only: <policy-directive>; <policy-directive>
```

指令
--

`Content-Security-Policy` header 的指令也可应用于 `Content-Security-Policy-Report-Only`.

CSP `report-uri` (en-US) 指令需要跟这个 header 一起用，否则这个 header 将会是一个昂贵却无操作 (无作用) 的机器 (设置)。

例子
--

这个 header 报告 (统计) 将会发生的违规行为。你可以使用这个 header 去迭代你的内容安全政策。你观察你的网站的行为，查看违反报告，然后通过 `Content-Security-Policy` 头选择所需的政策。
```

Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/
```


如果你希望收到报告，而且还想执行一项策略，使用`Content-Security-Policy` 头跟`report-uri` (en-US) 指令。
```

Content-Security-Policy: default-src https:; report-uri /csp-violation-report-endpoint/
```

违规报告的语法
-------

报告的 JSON 对象包括下面的数据：

`document-uri`

发生违规的文档 URI。

`referrer`

发生违规的文档 referrer。

`blocked-uri`

被内容安全政策阻塞加载的资源的 URI。如果被阻塞的 URI 与文档 URI 不同源，则被阻塞的 URI 被截断为只包含 scheme（协议），host（域名），和 port（端口）。

`violated-directive`

被违反的策略名。

`original-policy`

`Content-Security-Policy` HTTP 头部所指定的原始策略。

disposition

“执行”或“报告”取决于是使用`Content-Security-Policy` 头还是使用 `Content-Security-Header-Report-Only` 头。

违规报告样例
------

思考一下一个地址为 `http://example.com/signup.html` 的页面。它使用了下面的策略，禁止除了来自 `cdn.example.com` 的样式表外的其他任何资源。


```http
Content-Security-Policy-Report-Only: default-src 'none'; style-src cdn.example.com; report-uri /\_/csp-reports
```


`signup.html`的 html 如下：


```html
<!doctype html>
<html>
  <head>
    <title>Sign Up</title>
    <link rel="stylesheet" href="css/style.css" />
  </head>
  <body>
    ... Content ...
  </body>
</html>
```


你可以发现违规的地方吗？只允许加载来自`cdn.example.com 这个域名的`样式表，然而这个网站试着加载来自自己域名的样式表 (`http://example.com`)。当文档被访问时，可以执行 CSP(内容安全策略) 的浏览器将会用 POST 请求发送以下违规报告到`http://example.com/_/csp-reports`:


```js
{
  "csp-report": {
    "document-uri": "http://example.com/signup.html",
    "referrer": "",
    "blocked-uri": "http://example.com/css/style.css",
    "violated-directive": "style-src cdn.example.com",
    "original-policy": "default-src 'none'; style-src cdn.example.com; report-uri /\_/csp-reports",
    "disposition": "report"
  }
}
```


正如你所看到的，报告在`blocked-uri 上记录了`违反资源的完整路径。这并非总是如此。例如，当 `signup.html` 试图从 `http://anothercdn.example.com/stylesheet.css 加载`CSS，浏览器不会包含完整路径，只包含来源。这样做是为了防止泄漏跨域资源的敏感信息。

规范
--

| Specification |
| --- |
| Content Security Policy Level 3 # cspro-header |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `Content-Security-Policy`
* CSP `report-uri` (en-US) directive
* Content Security in WebExtensions
* Display security and privacy policies In Firefox Developer Tools
* https://report-uri.io – CSP and HPKP reporting
* Hosted CSP reporting for HTTPS migrations
Accept-CH
=========

**安全上下文:** 此项功能仅在一些支持的浏览器的安全上下文（HTTPS）中可用。

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

**`Accept-CH`** 头由服务器设置，以指定客户端应在后续请求中应包含哪些客户端 Client Hints (en-US) 提示头。

| Header type | Response header |
| --- | --- |
| Forbidden header name | ? |

**备注：** Client Hints (en-US) 只能在安全源（通过 TLS）上访问。所有安全的请求都应该持久化 Accept-CH 和 Accept-CH-Lifetime 头，以确保 Client Hints (en-US) 可靠地发送。

语法
--
```

Accept-CH: <list of client hints>
```

例子
--
```

Accept-CH: DPR, Viewport-Width
Accept-CH: Width
Accept-CH-Lifetime: 86400
Vary: DPR, Viewport-Width, Width
```


**备注：** 牢记要根据所接受的 Client Hints 更改响应 (en-US)。

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* `Accept-CH-Lifetime`
* `Vary`
Range
=====

The **`Range`** 是一个请求首部，告知服务器返回文件的哪一部分。在一个 `Range` 首部中，可以一次性请求多个部分，服务器会以 multipart 文件的形式将其返回。如果服务器返回的是范围响应，需要使用 `206` `Partial Content` 状态码。假如所请求的范围不合法，那么服务器会返回 `416` `Range Not Satisfiable` 状态码，表示客户端错误。服务器允许忽略 `Range` 首部，从而返回整个文件，状态码用 `200` 。

| Header type | Request header |
| --- | --- |
| Forbidden header name | no |

语法
--
```

Range: <unit>=<range-start>-
Range: <unit>=<range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>, <range-start>-<range-end>
```

指令
--

<unit>

范围所采用的单位，通常是字节（bytes）。


<range-start>

一个整数，表示在特定单位下，范围的起始值。

<range-end>

一个整数，表示在特定单位下，范围的结束值。这个值是可选的，如果不存在，表示此范围一直延伸到文档结束。

示例
--
```

Range: bytes=200-1000, 2000-6576, 19000-
```

规范
--

| Specification |
| --- |
| HTTP Semantics # field.range |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* `If-Range`
* `Content-Range`
* `Content-Type`
* `206` `Partial Content`
* `416` `Range Not Satisfiable`
Host
====

**Host** 请求头指明了请求将要发送到的服务器主机名和端口号。

如果没有包含端口号，会自动使用被请求服务的默认端口（比如 HTTPS URL 使用 443 端口，HTTP URL 使用 80 端口）。

所有 HTTP/1.1 请求报文中必须包含一个`Host`头字段。对于缺少`Host`头或者含有超过一个`Host`头的 HTTP/1.1 请求，可能会收到`400`（Bad Request）状态码。

| Header type | Request header |
| --- | --- |
| Forbidden header name | yes |

语法
--
```

Host: <host>:<port>
```

指令
--

<host>

服务器的域名（用于虚拟主机）。

<port> 可选

服务器监听的 TCP 端口号。

示例
--
```

Host: developer.mozilla.org
```

规范
--

| Specification |
| --- |
| HTTP Semantics # field.host |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参考
--

* `400`
* `<base>`
Content-Language
================

**`Content-Language`** 是一个 entity header（实体消息首部），用来说明访问者希望采用的语言或语言组合，这样的话用户就可以根据自己偏好的语言来定制不同的内容。

举个例子，假如设置了这样一条消息首部（ "`Content-Language: de-DE`" ），那么说明这份文件是为说德语的人提供的（当然这并不意味着文件本身就是用德语写的。比如，它可能是为说德语的人开设的英语教程的一部分，也就是用英语写的）。

如果没有指明 `Content-Language`，那么默认地，文件内容是提供给所有语言的访问者使用的。多个语言标签也是合法的，同样的，这个首部还可以用来描述不同媒体类型的文件，而不单单局限于文本型文档。

| Header type | Entity header |
| --- | --- |
| Forbidden header name | no |
| CORS-safelisted response-header | yes |
| CORS-safelisted request-header | yes |

语法
--
```

Content-Language: de-DE
Content-Language: en-US
Content-Language: de-DE, en-CA
```

指令
--

`language-tag`

多个语言标签需要用逗号隔开。每一个语言标签都是由一个或多个不区分大小写的子标签构成的，子标签之间用连字号 ("-", %x2D) 隔开。通常情况下，一个语言标签是由标识一个大的语言家族的主语言子标签（例如"en" = English），以及后面可选的用来缩小语言范围使更确切的一系列子标签（"en-CA" 表示在加拿大范围使用的英语的变种）构成的。


**备注：** 语言标签在 RFC 5646中被正式定义，它使用的语言代码依赖于 ISO 639 标准 (通常为 ISO 639-1 code list) 。

示例
--

### 声明文档的书写语言

全局的 `lang` 属性使用在 HTML 元素去表达全部的 HTML文档或者部分的语言。


```html
<html lang="de"></html>
```


不要使用这个 meta 元素去声明文档语言：


```html
<!-- /!\ This is bad practice -->
<meta http-equiv="content-language" content="de" />
```

### 为资源指定目标访问者

`Content-Language` 请求头用于指定\*\*页面的目标受众，\*\*并且可以指明当前页面存在多种语言。
```

Content-Language: de, en
```

规范
--

| Specification |
| --- |
| HTTP Semantics # field.content-language |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* `Accept-Language`
* HTTP headers, meta elements and language information
Sec-Fetch-User
==============

**`Sec-Fetch-User`** 获取元数据标头表明了一个导航请求是否由用户激活触发。

| Header type | Fetch Metadata Request Header |
| --- | --- |
| Forbidden header name | 只要包含前缀 `Sec-` 都属于应用程序禁止修改的 HTTP 消息头，用户代理保留全部对它们的控制权 |
| CORS-safelisted request header (en-US) |  |

语法
--
```

Sec-Fetch-User: ?0
Sec-Fetch-User: ?1
```

值
-

该值是一个布尔结构化的标头。

`?0`

导航请求由用户激活触发。

`?1`

导航请求由用户激活以外的原因触发。

示例
--

暂时没有内容

规范
--

| Specification |
| --- |
| Fetch Metadata Request Headers # sec-fetch-user-header |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `Sec-Fetch-Dest`
* `Sec-Fetch-Mode`
* `Sec-Fetch-Site`
Content-Range
=============

在 HTTP 协议中，响应首部 **`Content-Range`** 显示的是一个数据片段在整个文件中的位置。

| Header type | Response header |
| --- | --- |
| Forbidden header name | no |
| CORS-safelisted response-header | no |

语法
--
```

Content-Range: <unit> <range-start>-<range-end>/<size>
Content-Range: <unit> <range-start>-<range-end>/*
Content-Range: <unit> */<size>
```

指令
--

<unit>

数据区间所采用的单位。通常是字节（byte）。


<range-start>

一个整数，表示在给定单位下，区间的起始值。

<range-end>

一个整数，表示在给定单位下，区间的结束值。

<size>

整个文件的大小（如果大小未知则用"\*"表示）。

示例
--
```

Content-Range: bytes 200-1000/67589
```

规范
--

| Specification |
| --- |
| HTTP Semantics # field.content-range |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* `If-Range`
* `Range`
* `Content-Type`
* `206` `Partial Content`
* `416` `Range Not Satisfiable`
User-Agent
==========

**User-Agent** 首部包含了一个特征字符串，用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。

**备注：** 请阅读使用用户代理字段进行浏览器检测来了解为什么为不同的浏览器提供不同的页面或者服务通常不是一个好主意。


| Header type | Request header |
| --- | --- |
| Forbidden header name | no |

语法
--
```

User-Agent: <product> / <product-version> <comment>
```


浏览器通常使用的格式为：
```

User-Agent: Mozilla/<version> (<system-information>) <platform> (<platform-details>) <extensions>
```

指令
--

<product>

产品识别码。

<product-version>

产品版本号。

<comment>

零个或多个关于组成产品信息的注释。

Firefox UA 字符串
--------------

查阅 Firefox 用户代理字符串参考来获取更多关于基于 Firefox 和 Gecko 渲染引擎的用户代理字符串的细节信息。Firefox 的用户代理字符串自身可以分为四部分：

**Mozilla/5.0 (*platform*; rv:*geckoversion*) Gecko/*geckotrail* Firefox/*firefoxversion***

* ***Mozilla/5.0*** 是一个通用标记符号，用来表示与 Mozilla 兼容，这几乎是现代浏览器的标配。
* ***platform*** 用来说明浏览器所运行的原生系统平台（例如 Windows、Mac、Linux 或 Android），以及是否运行在手机上。搭载 Firefox OS 的手机仅简单地使用了 "Mobile" 这个字符串；因为 web 本身就是平台。注意 ***platform*** 可能会包含多个使用 "; " 隔开的标记符号。参见下文获取更多的细节信息及示例。
* **rv:*geckoversion*** 表示 Gecko 的发布版本号（例如 "17.0"）。在近期发布的版本中，***geckoversion*** 表示的值与 \*\**firefoxversion* \*\*相同。
* ***Gecko/geckotrail*** 表示该浏览器基于 Gecko 渲染引擎。
* 在桌面浏览器中，***geckotrail*** 是固定的字符串 "20100101" 。
* ***Firefox/firefoxversion*** 表示该浏览器是 Firefox，并且提供了版本号信息（例如 "17.0"）。
### 示例
```

Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0
```

Chrome UA 字符串
-------------

Chrome（或 Chromium/blink-based engines）用户代理字符串与 Firefox 的格式类似。为了兼容性，它添加了诸如 "KHTML, like Gecko" 和 "Safari" 这样的字符串。

### 示例
```

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
```

Opera UA 字符串
------------

现在，Opera 也是一款基于 blink 引擎的浏览器，这也是为什么它的 UA 看起来（和 Chrome 的）几乎一样的原因，不过，它添加了一个 "`OPR/<version>`"。

### 示例
```

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41
```


使用 Presto 引擎的、更老的 Opera 浏览器使用：
```

Opera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.2.15 Version/10.00
Opera/9.60 (Windows NT 6.0; U; en) Presto/2.1.1
```

Safari UA 字符串
-------------

在这个示例中，这是 Safari 的移动版本的用户代理字符串。因为其中包含了单词 "Mobile" 。

### 示例
```

Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1
```

Internet Explorer UA 字符串
------------------------

### 示例
```

Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)
```

爬虫和机器人的 UA 字符串
--------------

### 示例
```

Googlebot/2.1 (+http://www.google.com/bot.html)
```

规范
--

| Specification |
| --- |
| HTTP Semantics # field.user-agent |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* User-Agent 探测，历史及检查清单
* Firefox 用户代理字符串参考
* 使用用户代理字段进行浏览器检测
Link
====

HTTP 实体报头 **`Link`** 提供了序列化 HTTP 头部链接的方法。它在语义上与 HTML 元素 `<link>` 相等。

语法
--
```

Link: < uri-reference >; param1=value1; param2="value2"
```


`<uri-reference>`

URI reference 必须要用 `<` 和 `>`来关闭。

### 参数

link 头部包含以 `;` 分隔的参数，这些参数与 HTML 元素 `<link>` 的属性一致。

示例
--

URI 必须要用 `<` 和 `> 来关闭：`


```http
Link: <https://example.com>; rel="preload"
```



```http
Link: https://bad.example; rel="preload"
```

规范
--

| Specification |
| --- |
| Web Linking # header |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `103 Early Hints`
Access-Control-Allow-Headers
============================

响应首部 **`Access-Control-Allow-Headers`** 用于 preflight request（预检请求）中，列出了将会在正式请求的 `Access-Control-Request-Headers` 字段中出现的首部信息。

简单首部，如 simple headers、`Accept`、`Accept-Language`、`Content-Language`、`Content-Type`（只限于解析后的值为 `application/x-www-form-urlencoded`、`multipart/form-data` 或 `text/plain` 三种 MIME 类型（不包括参数）），它们始终是被支持的，不需要在这个首部特意列出。

如果请求中含有 `Access-Control-Request-Headers` 字段，那么这个首部是必要的。

| Header type | Response header |
| --- | --- |
| Forbidden header name | no |

语法
--
```

Access-Control-Allow-Headers: <header-name>[, <header-name>]*
Access-Control-Allow-Headers: *
```

指令
--

`<header-name>`

可支持的请求首部名字。请求头会列出所有支持的首部列表，用逗号隔开。

注意以下这些特定的首部是一直允许的：`Accept`, `Accept-Language`, `Content-Language`, `Content-Type`（但只在其值属于 MIME 类型 `application/x-www-form-urlencoded`, `multipart/form-data` 或 `text/plain`中的一种时）。这些被称作simple headers，你无需特意声明它们。

**`*` (wildcard)**

对于没有凭据的请求（没有 HTTP cookie 或 HTTP 认证信息的请求），值“ `*`”仅作为特殊的通配符值。在具有凭据的请求中，它被视为没有特殊语义的文字标头名称“ \*”。请注意，`Authorization`标头不能使用通配符，并且始终需要明确列出。

示例
--

### 自定义的请求头

下面是 `Access-Control-Allow-Headers` 标头的一个示例。它表明，除了 CORS 安全清单列出的请求标头外，对服务器的 CORS 请求还支持名为 X-Custom-Header 的自定义标头。
```

Access-Control-Allow-Headers: X-Custom-Header
```

### Multiple headers

此示例展示了支持多个标头时的 `Access-Control-Allow-Headers` 。
```

Access-Control-Allow-Headers: X-Custom-Header, Upgrade-Insecure-Requests
```

### Example preflight request

让我们看一个涉及`Access-Control-Allow-Headers`的预检请求示例。

#### Request

First, the request. The preflight request is an `OPTIONS` request which includes some combination of the three preflight request headers: `Access-Control-Request-Method`, `Access-Control-Request-Headers`, and `Origin`, such as:
```

OPTIONS /resource/foo
Access-Control-Request-Method: DELETE
Access-Control-Request-Headers: origin, x-requested-with
Origin: https://foo.bar.org
```


#### Response

If the server allows CORS requests to use the `DELETE` method, it responds with an `Access-Control-Allow-Methods` response header, which lists `DELETE` along with the other methods it supports:
```

HTTP/1.1 200 OK
Content-Length: 0
Connection: keep-alive
Access-Control-Allow-Origin: https://foo.bar.org
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 86400
```


If the requested method isn't supported, the server will respond with an error.

规范
--

| Specification |
| --- |
| Fetch Standard # http-access-control-allow-headers |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

有关兼容性的注意事项
----------

* 在最新规范中提出的通配符 (\*)，尚未被如下浏览器实现：
    + Chromium: Issue 615313
    + Firefox: Firefox bug 1309358
    + Servo: Issue 13283
    + WebKit: Issue 165508
相关内容
----

* `Access-Control-Allow-Origin`
* `Access-Control-Expose-Headers`
* `Access-Control-Allow-Methods`
* `Access-Control-Request-Headers`
If-Unmodified-Since
===================

HTTP 协议中的 **`If-Unmodified-Since`** 消息头用于请求之中，使得当前请求成为条件式请求：只有当资源在指定的时间之后没有进行过修改的情况下，服务器才会返回请求的资源，或是接受 `POST` 或其他 non-safe 方法的请求。如果所请求的资源在指定的时间之后发生了修改，那么会返回 `412` (Precondition Failed) 错误。

常见的应用场景有两种：

* 与 non-safe 方法如 `POST` 搭配使用，可以用来优化并发控制，例如在某些 wiki 应用中的做法：假如在原始副本获取之后，服务器上所存储的文档已经被修改，那么对其作出的编辑会被拒绝提交。
* 与含有 `If-Range` 消息头的范围请求搭配使用，用来确保新的请求片段来自于未经修改的文档。

| Header type | Request header |
| --- | --- |
| Forbidden header name | no |

语法
--
```

If-Unmodified-Since: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT
```

指令
--

<day-name>

"Mon", "Tue", "Wed", "Thu", "Fri", "Sat" 或 "Sun" 之一（区分大小写）。

<day>

两位数字表示的天数，例如"04" or "23"。

<month>

"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" 之一（区分大小写）。

<year>

4 位数字表示的年份，例如 "1990" 或者"2016"。

<hour>

两位数字表示的小时数，例如 "09" 或者 "23"。

<minute>

两位数字表示的分钟数，例如"04" 或者 "59"。

<second>

两位数字表示的秒数，例如 "04" 或者 "59"。

`GMT`

国际标准时间。HTTP 中的时间均用国际标准时间表示，从来不使用当地时间。

示例
--
```

If-Unmodified-Since: Wed, 21 Oct 2015 07:28:00 GMT
```

规范
--

| Specification |
| --- |
| HTTP Semantics # field.if-unmodified-since |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* `If-Unmodified-since`
* `If-Match`
* `If-None-Match`
* `If-Range`
* `412` `Precondition Failed`
CSP: sandbox
============

The HTTP `Content-Security-Policy` (CSP) **`sandbox`** directive enables a sandbox for the requested resource similar to the `<iframe>` `sandbox` attribute. It applies restrictions to a page's actions including preventing popups, preventing the execution of plugins and scripts, and enforcing a same-origin policy.

|  |  |
| --- | --- |
| CSP version | 1.1 / 2 |
| Directive type | Document directive |
| 
 This directive is not supported in the `<meta>`
 element or by the
 `Content-Security-policy-Report-Only`
 header field.
  |

句法
--
```

Content-Security-Policy: sandbox;
Content-Security-Policy: sandbox <value>;
```


`<value>`可以选择是以下值之一：

`allow-forms`

允许嵌入式浏览上下文提交表单。如果未使用此关键字，则不允许此操作。

`allow-modals`

允许嵌入式浏览上下文打开模态窗口。

`allow-orientation-lock`

允许嵌入式浏览上下文禁用锁定屏幕方向的功能。

`allow-pointer-lock`

允许嵌入式浏览上下文使用Pointer Lock API (en-US)。

`allow-popups`

允许弹出窗口（像`window.open`，`target="_blank"`，`showModalDialog`）。如果未使用此关键字，则该功能将无提示失败。

`allow-popups-to-escape-sandbox`

允许沙盒文档打开新窗口而不强制沙盒标记。例如，这将允许安全地沙箱化第三方广告，而不会对登陆页面施加相同的限制。

`allow-presentation`

允许嵌入器控制 iframe 是否可以启动演示会话。

`allow-same-origin`

允许将内容视为来自其正常来源。如果未使用此关键字，则嵌入的内容将被视为来自唯一来源。

`allow-scripts`

允许嵌入式浏览上下文运行脚本（但不创建弹出窗口）。如果未使用此关键字，则不允许此操作。

`allow-top-navigation`

允许嵌入式浏览上下文将内容导航（加载）到顶级浏览上下文。如果未使用此关键字，则不允许此操作。

例子
--


```bash
Content-Security-Policy: sandbox allow-scripts;
```

Specifications
--------------

| Specification |
| --- |
| Content Security Policy Level 3 # directive-sandbox |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

See also
--------

* `Content-Security-Policy`
* `sandbox` attribute on `<iframe>` elements
CSP: worker-src
===============

HTTP `Content-Security-Policy`（内容安全策略，CSP）中的 **`worker-src`** 指令指定了 `Worker`、`SharedWorker` 或 `ServiceWorker` 脚本的有效来源。

|  |  |
| --- | --- |
| CSP 版本 | 3 |
| 指令类型 | fetch 指令 |
| 回落 | 如果这个指令不存在，则用户代理在管理 worker 执行时，将首先查找 `child-src` 指令，然后查找 `script-src` (en-US) 指令，最后再查找 `default-src` 指令。 |

语法
--

`worker-src` 策略可以允许一个或者多个源：


```http
Content-Security-Policy: worker-src <source>;
Content-Security-Policy: worker-src <source> <source>;
```

### 源

`<source>` 可以是 CSP 源值 (en-US)中的任意一个。

请注意，这套相同的值可以用于所有 fetch 指令（以及许多其他的指令 (en-US)）。

示例
--

### 违规的案例

给定此 CSP 标头：


```http
Content-Security-Policy: worker-src https://example.com/
```


`Worker`、`SharedWorker`、`ServiceWorker` 被阻止，无法加载。


```html
<script>
 let blockedWorker = new Worker("data:application/javascript,…");
 blockedWorker = new SharedWorker("https://not-example.com/");
 navigator.serviceWorker.register("https://not-example.com/sw.js");
</script>
```

规范
--

| Specification |
| --- |
| Content Security Policy Level 3 # directive-worker-src |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `Content-Security-Policy`
* Web Worker 的内容安全策略（CSP）
* `Worker`、`SharedWorker`、`ServiceWorker`
CSP: script-src-elem
====================

HTTP `Content-Security-Policy`（CSP 内容安全性策略）中的 **`script-src-elem`** 指令指定了 JavaScript `<script>` 元素的有效来源。

这个指令仅在 `<script>` 元素（脚本请求和块）指定有效的来源。它不适用于触发脚本执行的的其他 JavaScript 源，例如内联脚本事件处理程序（`onclick`）、在“unsafe-eval”（不安全地执行字符串表达式）检查下的 (en-US)脚本执行方法和 XSLT 样式表（可以使用 `script-src` (en-US) 为所有 JavaScript 脚本源指定有效来源，也可以使用 `script-src-attr` (en-US) 仅为内联样式脚本处理程序指定有效源）。

|  |  |
| --- | --- |
| CSP 版本 | 3 |
| 指令类型 | fetch 指令 |
| `default-src` 回落 | 是。如果这个指令不存在，则用户代理将查找 `script-src` (en-US) 指令，如果两个都不存在，则回落到 `default-src` 指令。 |

语法
--

`script-src-elem` 策略可以允许一个或者多个源：


```http
Content-Security-Policy: script-src-elem <source>;
Content-Security-Policy: script-src-elem <source> <source>;
```


`script-src-elem` 可以与 `script-src` (en-US) 一起使用：


```http
Content-Security-Policy: script-src <source>;
Content-Security-Policy: script-src-elem <source>;
```

### 源

`<source>` 可以是 CSP 源值 (en-US)中的任意一个。

请注意，这套相同的值可以用于所有 fetch 指令（以及许多其他的指令 (en-US)）。

示例
--

### 违规的案例

给定此 CSP 标头：


```http
Content-Security-Policy: script-src-elem https://example.com/
```


…以下脚本被阻止，不会加载和执行：


```html
<script src="https://not-example.com/js/library.js"></script>
```

规范
--

| Specification |
| --- |
| Content Security Policy Level 3 # directive-script-src-elem |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `Content-Security-Policy`（内容安全策略）
* `<script>`
* `script-src` (en-US)
* `script-src-attr` (en-US)
CSP: font-src
=============

HTTP `Content-Security-Policy` (CSP 内容安全策略) 中 **`font-src`** 指令定义了 `@font-face` 加载字体的有效源规则。

|  |  |
| --- | --- |
| CSP 版本 | 1 |
| 指令类型 | fetch 指令 |
| `default-src` 回落 | 是。如果不存在该指令，用户代理将查找 `default-src` 指令。 |

语法
--

`font-src` 策略可以包含一个或多个源：
```

Content-Security-Policy: font-src <source>;
Content-Security-Policy: font-src <source> <source>;
```

### 源代码

`<source>` 可以是 CSP 源值 (en-US)列出来的任意一个。

注意，这套相同的值可以用于所有 fetch 指令（以及许多其他指令 (en-US)）。

示例
--

### 违规的案例

给定此 CSP 标头：


```bash
Content-Security-Policy: font-src https://example.com/
```


以下的字体源将被阻止，不会加载到浏览器中：


```html
<style>
 @font-face {
 font-family: "MyFont";
 src: url("https://not-example.com/font");
 }
 body {
 font-family: "MyFont";
 }
</style>
```

规范
--

| Specification |
| --- |
| Content Security Policy Level 3 # directive-font-src |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `Content-Security-Policy`（内容安全策略）
* `@font-face`