網路錯誤記錄
網路錯誤記錄(Network Error Logging, 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
-
由於未涵蓋先前錯誤的原因,對 DNS 伺服器的請求失敗(例如 SERVFAIL)
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 協定中的錯誤未涵蓋先前的錯誤,連接失敗
規範
Specification |
---|
Network Error Logging # nel-response-header |
瀏覽器相容性
BCD tables only load in the browser