Журналирование сетевых ошибок
Журналирование сетевых ошибок (NEL)
Экспериментальная функция: Это экспериментальная технология
Перед использованием в рабочей среде внимательно ознакомьтесь с таблицей совместимости с браузерами.
Журналирование сетевых ошибок — это механизм, который можно настроить с помощью HTTP-заголовка NEL — заголовка ответа. Этот экспериментальный заголовок позволяет веб-сайтам и приложениям подписаться на получение отчетов о неудачных (и, при желании, успешных) сетевых запросах из браузеров, поддерживающих эту функцию.
Отчеты отправляются в группу для отчетов, определенную в заголовке Report-To.
Использование
Веб-приложения могут включить это поведение с помощью заголовка NEL, представляющего собой объект в формате JSON:
NEL: { "report_to": "nel",
"max_age": 31556952 }
Источник должен считаться браузером безопасным.
В заголовке NEL можно указать следующие ключи объекта:
- report_to
-
Группа API отчетности, в которую следует отправлять отчеты о сетевых ошибках (см. ниже).
- max_age
-
Задает срок действия политики в секундах (подобно тому, как срок действия, например, политик HSTS ограничен по времени). Срок действия указанной группы для отчетов должен быть не меньше срока действия политики NEL.
- include_subdomains
-
Если
true, эта политика NEL также включается для всех поддоменов источника, но только для сетевых ошибок, возникших во время разрешения DNS. Политика NEL не будет включена для поддоменов, еслиinclude_subdomainsотсутствует, имеет значениеfalseили если возникли другие сетевые ошибки (не связанные с DNS). Чтобы этот параметр действовал, группа для отчетов также должна быть настроена на включение поддоменов. - 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-сервер пользователя ответил, но не смог определить 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, не охваченных предыдущими ошибками
Спецификации
| Спецификация |
|---|
| Network Error Logging> # nel-response-header> |
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
Network_Error_Logging |
71 | 79 | Нет | 58 | Нет | 71 | Нет | 50 | Нет | 10.2 | 71 | Нет |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Network_Error_Logging