Spec-Zone.ru › HTTP

Регистрация сетевых ошибок

Регистрация сетевых ошибок

Экспериментально: Это экспериментальная технология
Перед использованием в производстве внимательно ознакомьтесь со таблицей совместимости браузеров.

Регистрация сетевых ошибок — это механизм, который можно настроить с помощью 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

Spec-Zone.ru

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