Spec-Zone.ru › HTTP

Журналирование сетевых ошибок

Журналирование сетевых ошибок (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 Нет

См. также

  • API отчетности

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API