網路錯誤日誌 (NEL)

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

網路錯誤日誌是一種可以透過 NEL HTTP 響應頭 配置的機制。這個實驗性頭部允許網站和應用程式選擇接收來自支援瀏覽器關於失敗(如果需要,也可包含成功)網路請求的報告。

報告將傳送到一個在 Report-To 頭部中定義的報告組。

用法

Web 應用程式透過 NEL 頭部選擇啟用此行為,該頭部是一個 JSON 編碼 物件

http
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 頭部中定義,例如

http
Report-To: { "group": "nel",
             "max_age": 31556952,
             "endpoints": [
              { "url": "https://example.com/csp-reports" }
             ]
           }

錯誤報告

在這些示例中,顯示了報告 API 響應內容。頂級 "body" 鍵包含網路錯誤報告。

HTTP 400 (Bad Request) 響應

json
{
  "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

json
{
  "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

使用者代理成功收到響應,但其狀態碼為 4xx5xx

http.protocol.error

由於 HTTP 協議錯誤,連線中止

http.response.invalid

響應為空、內容長度不匹配、編碼不正確和/或導致使用者代理無法處理響應的其他情況

http.response.redirect_loop

由於檢測到重定向迴圈,請求被中止

http.failed

由於 HTTP 協議中未涵蓋在先前錯誤中的錯誤,連線失敗

規範

規範
網路錯誤日誌
# nel-response-header

瀏覽器相容性

另見