Spec-Zone.ru › Web APIs

API отчётов

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

Примечание: Эта функция доступна в Web Workers.

API отчётов предоставляет общий механизм создания отчётов для веб-приложений, который позволяет получать отчёты по различным функциям платформы (например, Политике безопасности контента, Политике разрешений или отчётам о устаревших функциях) согласованным способом.

Концепции и использование

На веб-платформе есть несколько различных функций и проблем, которые генерируют информацию, полезную разработчикам веб-приложений при поиске ошибок или улучшении веб-сайтов. Эта информация может включать:

  • нарушения Политики безопасности контента.
  • нарушения Политики разрешений.
  • Использование устаревших функций (когда вы используете что-то, что скоро перестанет работать в браузерах).
  • Возникновение сбоев.
  • Возникновение вмешательств пользователя (когда браузер блокирует то, что пытается сделать ваш код, потому что это считается риском для безопасности, например, или просто раздражающим, как автоматическое воспроизведение аудио).

Цель API отчётов — предоставить согласованный механизм создания отчётов, который можно использовать для предоставления разработчикам такой информации в виде отчётов, представленных объектами JavaScript. В следующих разделах подробно описаны несколько способов его использования.

Конечные точки сервера отчетов

Для каждого уникального источника, для которого вы хотите получать отчёты, можно указать ряд «конечных точек», которые представляют собой именованные URL-адреса (или группы URL-адресов), которым пользовательский агент может отправлять отчёты. Сервер отчетов на этих конечных точках может собирать отчёты, обрабатывать и представлять их по мере необходимости вашим приложением.

Заголовок HTTP Reporting-Endpoints используется для указания деталей различных конечных точек, доступных пользовательскому агенту для отправки отчетов. Директива report-to может затем использоваться в определенных заголовках HTTP для указания конкретной конечной точки, которая будет использоваться для соответствующего отчета. Например, директива CSP report-to может использоваться в заголовках HTTP Content-Security-Policy или Content-Security-Policy-Report-Only для указания конечной точки, в которую должны отправляться отчёты о нарушениях CSP.

Примечание: Нет абсолютной гарантии доставки отчета — отчёт всё ещё может не быть собран, если произойдет серьезная ошибка.

Сами отчёты отправляются в целевую конечную точку пользовательским агентом в операции POST с типом Content-Type application/reports+json. Это сериализация объектов Report, где type указывает тип отчета, url указывает источник отчета, а body содержит сериализацию API-интерфейса, соответствующего типу отчета. Например, отчёты о нарушениях CSP имеют type csp-violation и body, которая является сериализацией объекта CSPViolationReportBody.

Отчеты, отправленные на конечные точки, могут быть получены независимо от работы веб-сайтов, к которым они относятся, что полезно — например, сбой может привести к остановке веб-сайта и предотвратить выполнение чего-либо, но отчет всё равно можно получить, чтобы дать разработчику некоторые подсказки о том, почему это произошло.

Наблюдатели отчетов

Отчёты также можно получить с помощью объектов ReportingObserver, созданных с помощью JavaScript внутри веб-сайта, для которого вы хотите получить отчёты. Этот метод не такой надёжный, как отправка отчетов на сервер, потому что любой сбой страницы может помешать получению отчетов — но он проще в настройке и более гибкий.

Объект ReportingObserver создается с помощью конструктора ReportingObserver(), которому передаются два параметра:

  • Функция обратного вызова с двумя параметрами — массив отчетов, доступных в очереди отчетов наблюдателя, и копия того же объекта ReportingObserver, что позволяет управлять наблюдением непосредственно изнутри обратного вызова. Обратный вызов выполняется при запуске наблюдения.
  • Словарь параметров, позволяющий указать тип собираемых отчетов и следует ли наблюдать за отчетами, сгенерированными до создания наблюдателя (buffered: true).

Затем на наблюдателе доступны методы для начала сбора отчетов (ReportingObserver.observe()), получения отчетов, находящихся в очереди отчетов (ReportingObserver.takeRecords()) и отключения наблюдателя, чтобы он больше не мог собирать записи (ReportingObserver.disconnect()).

Типы отчетов

Отчеты, отправленные на конечные точки отчетов и наблюдателям отчетов, по сути, одинаковы: они имеют источник url, type, и body, который является экземпляром интерфейса, соответствующего этому типу. Единственное различие заключается в том, что серверные отчеты являются JSON-сериализациями объектов.

Сопоставление типов отчета type с body показано ниже.

type body Отчетные элементы
deprecation DeprecationReportBody Используемые сайтом устаревшие функции веб-платформы.
intervention InterventionReportBody Функции, заблокированные пользовательским агентом, например, если разрешения не предоставлены.
csp-violation CSPViolationReportBody Нарушения политики CSP сайта.

Генерация отчетов с помощью WebDriver

Спецификация API отчетов также определяет расширение Generate Test Report для WebDriver, которое позволяет моделировать генерацию отчетов во время автоматизации. Отчеты, сгенерированные с помощью WebDriver, наблюдаются любыми зарегистрированными объектами ReportObserver, присутствующими на загруженном веб-сайте. Это пока не задокументировано.

Интерфейсы

DeprecationReportBody

Содержит сведения об устаревших функциях веб-платформы, используемых веб-сайтом.

InterventionReportBody

Содержит сведения об отчете об вмешательстве, который генерируется, когда запрос, сделанный веб-сайтом, был отклонен браузером; например, по соображениям безопасности.

Report

Объект, представляющий один отчет.

ReportingObserver

Объект, который можно использовать для сбора и доступа к отчетам по мере их создания.

Связанные интерфейсы

Эти интерфейсы определены в рамках спецификаций HTTP Политики безопасности контента (CSP):

CSPViolationReportBody

Содержит подробности о нарушении CSP.

SecurityPolicyViolationEvent

Представляет объект события securitypolicyviolation события, сгенерированного на элементе, документе или рабочем процессе, когда нарушается его политика CSP.

Связанные заголовки HTTP

Эти заголовки HTTP определяют конечные точки, на которые отправляются отчеты.

Reporting-Endpoints

Устанавливает имя и URL-адрес конечных точек отчетов. Эти конечные точки могут использоваться в директиве report-to, которая может использоваться с несколькими заголовками HTTP, включая Content-Security-Policy и/или Content-Security-Policy-Report-Only.

Report-To Устаревшее

Устанавливает имя и URL-адрес групп конечных точек отчетов, которые могут использоваться с несколькими заголовками HTTP, включая Content-Security-Policy.

Конечные точки отчетов можно установить для следующих отчетов с помощью директивы report-to в соответствующих заголовках:

Нарушения CSP

report-to в Content-Security-Policy или Content-Security-Policy-Report-Only.

Примеры

Создание отчетов об устаревших функциях

В нашем примере deprecation_report.html мы создаём простой наблюдатель отчётов, чтобы следить за использованием устаревших функций на нашей веб-странице:

const options = {
  types: ["deprecation"],
  buffered: true,
};

const observer = new ReportingObserver((reports, observer) => {
  reportBtn.onclick = () => displayReports(reports);
}, options);

Затем мы говорим ему начать наблюдение за отчётами, используя ReportingObserver.observe(); это говорит наблюдателю начать сбор отчётов в его очереди отчётов и выполнить функцию обратного вызова, указанную внутри конструктора:

observer.observe();

Позже в примере мы намеренно используем устаревшую версию MediaDevices.getUserMedia():

if (navigator.mozGetUserMedia) {
  navigator.mozGetUserMedia(constraints, success, failure);
} else {
  navigator.getUserMedia(constraints, success, failure);
}

Это приводит к генерации отчёта об устаревании; благодаря обработчику событий, который мы настроили внутри конструктора ReportingObserver(), мы теперь можем нажать кнопку, чтобы отобразить детали отчёта.

image of a jolly bearded man with various stats displayed below it about a deprecated feature

Примечание: Если вы посмотрите на полный исходный код, вы заметите, что мы фактически дважды вызываем устаревшее getUserMedia() метод. После первого вызова ReportingObserver.takeRecords(), который возвращает первый сгенерированный отчёт и очищает очередь. Из-за этого, когда нажимается кнопка, отображается только второй отчёт.

Спецификации

Спецификация
API отчётов
# intro
Политика безопасности контента уровня 3
# cspviolationreportbody
Отчёт об устаревании
# deprecationreportbody
Отчёт об вмешательстве
# intervention-report

Совместимость с браузерами

См. также

  • Политика безопасности контента
  • Permissions-Policy

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Reporting_API

Spec-Zone.ru

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