网络错误日志 (NEL)
网络错误日志是一种可以通过 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 (Bad Request) 响应
{
"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 |
浏览器兼容性
加载中…