Регистрация сетевых ошибок
Регистрация сетевых ошибок
Экспериментально: Это экспериментальная технология
Перед использованием в производстве внимательно ознакомьтесь со таблицей совместимости браузеров.
Регистрация сетевых ошибок — это механизм, который можно настроить с помощью HTTP-заголовка NELзаголовка ответа. Этот экспериментальный заголовок позволяет веб-сайтам и приложениям получать отчеты об ошибках сетевых запросов (и, при необходимости, об успешных запросах) от поддерживающих браузеров.
Отчеты отправляются в группу отчетов, определенную в заголовке Report-To.
Использование
Веб-приложения включают это поведение с помощью заголовка 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": "137.205.28.66", "status_code": 400, "type": "http.error", "url": "https://example.com/bad-request" } }
Имя DNS не разрешено
Обратите внимание, что в этом отчете параметр phase установлен на 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 пользователя ответил, но не смог разрешить IP-адрес для запрошенного URI.
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-
Пользовательский агент успешно получил ответ, но у него был код состояния 4xx или 5xx
http.protocol.error-
Подключение было прервано из-за ошибки протокола HTTP
http.response.invalid-
Ответ пустой, имеет несоответствие длины содержимого, неправильное кодирование и/или другие условия, которые препятствуют обработке ответа пользовательским агентом
http.response.redirect_loop-
Запрос был прерван из-за обнаруженного цикла перенаправления
http.failed-
Подключение завершилось ошибкой из-за ошибок в протоколе HTTP, не охваченных предыдущими ошибками
Спецификации
| Спецификация |
|---|
| Регистрация сетевых ошибок # nel-response-header |
Совместимость браузеров
| Десктопные | Мобильные | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | |
Network_Error_Logging |
71 |
79 |
Нет |
Нет |
58 |
Нет |
71 |
71 |
Нет |
50 |
Нет |
10.2 |
© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Network_Error_Logging