网络错误日志

实验性: 这是一项实验性技术
在生产环境中使用此功能之前,请仔细查看浏览器兼容性表格

网络错误日志记录是一种可以通过 NEL HTTP 响应头 配置的机制。此实验性头允许网站和应用程序选择接收来自支持浏览器的失败(以及如果需要,成功)网络获取的报告。

报告发送到在 Report-To 头中定义的报告组。

用法

Web 应用程序使用 NEL 头选择此行为,该头是JSON 编码的对象

http
NEL: { "report_to": "nel",
       "max_age": 31556952 }

需要浏览器认为安全的来源。

可以在 NEL 头中指定以下对象键

report_to

用于发送网络错误报告的报告 API组(请参见下文)。

max_age

指定策略的生存期,以秒为单位(类似于例如 HSTS 策略的时间限制)。引用的报告组的生存期应至少与 NEL 策略一样长。

include_subdomains

如果为 true,则策略适用于设置策略头的来源下的所有子域。如果要启用此选项,则还应将报告组设置为包含子域。

success_fraction

介于 0 和 1 之间的浮点值,指定要报告的成功网络请求的比例。默认为 0,因此如果 JSON 负载中不存在此键,则不会报告任何成功的网络请求。

failure_fraction

介于 0 和 1 之间的浮点值,指定要报告的失败网络请求的比例。默认为 1,因此如果 JSON 负载中不存在此键,则将报告所有失败的网络请求。

上面引用的报告组以通常的方式在 Report-To 头中定义,例如

http
Report-To: { "group": "nel",
             "max_age": 31556952,
             "endpoints": [
              { "url": "https://example.com/csp-reports" }
             ]
           }

错误报告

在这些示例中,显示了报告 API 响应内容。顶级"body"键包含网络错误报告。

HTTP 400(错误请求)响应

json
{
  "age": 20,
  "type": "network-error",
  "url": "https://example.com/previous-page",
  "body": {
    "elapsed_time": 338,
    "method": "POST",
    "phase": "application",
    "protocol": "http/1.1",
    "referrer": "https://example.com/previous-page",
    "sampling_fraction": 1,
    "server_ip": "192.0.2.172",
    "status_code": 400,
    "type": "http.error",
    "url": "https://example.com/bad-request"
  }
}

DNS 名称未解析

请注意,此报告中的阶段设置为dns,并且没有可用的server_ip来包含。

json
{
  "age": 20,
  "type": "network-error",
  "url": "https://example.com/previous-page",
  "body": {
    "elapsed_time": 18,
    "method": "POST",
    "phase": "dns",
    "protocol": "http/1.1",
    "referrer": "https://example.com/previous-page",
    "sampling_fraction": 1,
    "server_ip": "",
    "status_code": 0,
    "type": "dns.name_not_resolved",
    "url": "https://example-host.com/"
  }
}

网络错误的类型可能是规范中以下预定义值之一,但浏览器可以添加和发送自己的错误类型

dns.unreachable

用户的 DNS 服务器无法访问

dns.name_not_resolved

用户的 DNS 服务器已响应,但无法为请求的 URI 解析 IP 地址。

dns.failed

由于先前错误未涵盖的原因(例如 SERVFAIL),对 DNS 服务器的请求失败

dns.address_changed

出于安全原因,如果传递原始报告的服务器 IP 地址与错误生成时当前的服务器 IP 地址不同,则报告数据将降级为仅包含有关此问题的信息,并将类型设置为dns.address_changed

tcp.timed_out

到服务器的 TCP 连接超时

tcp.closed

TCP 连接由服务器关闭

tcp.reset

TCP 连接已重置

tcp.refused

TCP 连接被服务器拒绝

tcp.aborted

TCP 连接已中止

tcp.address_invalid

IP 地址无效

tcp.address_unreachable

IP 地址无法访问

tcp.failed

TCP 连接由于先前错误未涵盖的原因而失败

http.error

用户代理成功接收了响应,但它具有4xx5xx状态代码

http.protocol.error

由于 HTTP 协议错误而中止连接

http.response.invalid

响应为空、内容长度不匹配、编码不正确和/或其他阻止用户代理处理响应的条件

http.response.redirect_loop

由于检测到重定向循环而中止请求

http.failed

连接由于 HTTP 协议中先前错误未涵盖的错误而失败

规范

规范
网络错误日志
# nel-response-header

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。