網路錯誤日誌
網路錯誤日誌記錄是一種可以透過 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.errorhttp.protocol.error-
由於 HTTP 協議錯誤而中止連線
http.response.invalid-
響應為空、內容長度不匹配、編碼不正確和/或其他阻止使用者代理處理響應的條件
http.response.redirect_loop-
由於檢測到重定向迴圈而中止請求
http.failed-
連線由於 HTTP 協議中先前錯誤未涵蓋的錯誤而失敗
規範
| 規範 |
|---|
| 網路錯誤日誌 # nel-response-header |
瀏覽器相容性
BCD 表格僅在啟用 JavaScript 的瀏覽器中載入。