網路錯誤日誌 (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.errorhttp.protocol.error-
由於 HTTP 協議錯誤,連線中止
http.response.invalid-
響應為空、內容長度不匹配、編碼不正確和/或導致使用者代理無法處理響應的其他情況
http.response.redirect_loop-
由於檢測到重定向迴圈,請求被中止
http.failed-
由於 HTTP 協議中未涵蓋在先前錯誤中的錯誤,連線失敗
規範
| 規範 |
|---|
| 網路錯誤日誌 # nel-response-header |
瀏覽器相容性
載入中…