网络错误日志
网络错误日志记录是一种可以通过 NEL
HTTP 响应头 配置的机制。此实验性头允许网站和应用程序选择接收来自支持浏览器的失败(以及如果需要,成功)网络获取的报告。
报告发送到在 Report-To
头中定义的报告组。
用法
Web 应用程序使用 NEL 头选择此行为,该头是JSON 编码的对象
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
头中定义,例如
Report-To: { "group": "nel",
"max_age": 31556952,
"endpoints": [
{ "url": "https://example.com/csp-reports" }
]
}
错误报告
在这些示例中,显示了报告 API 响应内容。顶级"body"
键包含网络错误报告。
HTTP 400(错误请求)响应
{
"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
来包含。
{
"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
http.protocol.error
-
由于 HTTP 协议错误而中止连接
http.response.invalid
-
响应为空、内容长度不匹配、编码不正确和/或其他阻止用户代理处理响应的条件
http.response.redirect_loop
-
由于检测到重定向循环而中止请求
http.failed
-
连接由于 HTTP 协议中先前错误未涵盖的错误而失败
规范
规范 |
---|
网络错误日志 # nel-response-header |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。