webRequest
Добавьте обработчики событий для различных стадий выполнения HTTP-запроса, включая запросы WebSocket в ws:// и wss://. Обработчик событий получает подробную информацию о запросе и может изменять или отменять запрос.
Каждое событие срабатывает на определенной стадии запроса. Типичная последовательность событий выглядит так:
onErrorOccurred может сработать в любое время во время запроса. Также обратите внимание, что иногда последовательность событий может отличаться от этой. Например, в Firefox при обновлении HSTS событие onBeforeRedirect срабатывает сразу после onBeforeRequest. onErrorOccurred также срабатывает, если Защита от отслеживания Firefox блокирует запрос.
Все события – кроме onErrorOccurred – могут принимать три аргумента для addListener():
- сам обработчик
- объект
filter, поэтому вы можете получать уведомления только о запросах, отправленных на определенные URL-адреса или для определенных типов ресурсов - необязательный объект
extraInfoSpec. Вы можете использовать его для передачи дополнительных инструкций, специфичных для события.
Функции-обработчику передается объект details, содержащий информацию о запросе. Это включает идентификатор запроса, который предоставляется, чтобы расширение могло сопоставить события, связанные с одним запросом. Он уникален в рамках сеанса браузера и контекста расширения. Он остается неизменным на протяжении всего запроса, даже при переадресациях и обмене данными для аутентификации.
Для использования API webRequest для заданного хоста, расширение должно иметь разрешение "webRequest" API и разрешение на хост для этого хоста. Для использования функции "blocking" расширение также должно иметь разрешение "webRequestBlocking" API.
Для перехвата ресурсов, загружаемых страницей (таких как изображения, скрипты или таблицы стилей), расширение должно иметь разрешение на хост как для ресурса, так и для главной страницы, запрашивающей этот ресурс. Например, если страница по адресу https://developer.mozilla.org загружает изображение из https://mdn.mozillademos.org, то расширение должно иметь оба разрешения на хост, чтобы перехватить запрос на изображение.
Изменение запросов
При некоторых событиях вы можете изменять запрос. В частности, вы можете:
- отменить запрос в:
- перенаправить запрос в:
- изменять заголовки запроса в:
- изменять заголовки ответа в:
- предоставить учетные данные для аутентификации в:
Для этого нужно передать опцию со значением "blocking" в аргумент extraInfoSpec к событию addListener(). Это делает обработчик синхронным.
В обработчике вы можете вернуть объект BlockingResponse, который указывает на необходимые изменения, например, измененный заголовок запроса, который нужно отправить.
Запросы при запуске браузера
Когда обработчик зарегистрирован с опцией "blocking" и зарегистрирован во время запуска расширения, если во время запуска браузера происходит запрос, соответствующий обработчику, расширение запускается раньше. Это позволяет расширению наблюдать за запросом при запуске браузера. Если вы не предпримите этих шагов, запросы, выполненные при запуске, могут быть пропущены.
Спекулятивные запросы
Браузер может выполнять спекулятивные подключения, когда он определяет, что запрос к URI может появиться вскоре. Такое подключение не предоставляет действительную информацию о вкладке, поэтому такие данные о запросе, как tabId, frameId, parentFrameId, и т.д. неточны. Эти подключения имеют webRequest.ResourceType типа speculative.
Доступ к информации о безопасности
В обработчике onHeadersReceived вы можете получить доступ к свойствам TLS запроса, вызвав getSecurityInfo(). Для этого необходимо также передать "blocking" в аргумент extraInfoSpec к событию addListener().
Вы можете прочитать детали рукопожатия TLS, но не можете их изменить или переопределить решения браузера о доверии.
Изменение ответов
Чтобы изменить тела HTTP-ответов для запроса, вызовите webRequest.filterResponseData, передав ему идентификатор запроса. Это возвращает объект webRequest.StreamFilter, который вы можете использовать для проверки и изменения данных по мере их получения браузером.
Для этого вам должно быть предоставлено разрешение "webRequestBlocking" API, а также разрешение "webRequest" API и разрешение на хост для соответствующего хоста.
Типы
webRequest.BlockingResponse-
Объект этого типа возвращается обработчиками событий, которые установили
"blocking"в их аргументеextraInfoSpec. Установив определённые свойства вBlockingResponse, обработчик может изменить сетевые запросы. webRequest.CertificateInfo-
Объект, описывающий один сертификат X.509.
webRequest.HttpHeaders-
Массив HTTP-заголовков. Каждый заголовок представлен объектом с двумя свойствами:
nameи либоvalue, либоbinaryValue. webRequest.RequestFilter-
Объект, описывающий фильтры для применения к
webRequestсобытиям. webRequest.ResourceType-
Представляет определенный вид ресурса, полученного в веб-запросе.
webRequest.SecurityInfo-
Объект, описывающий свойства безопасности конкретного веб-запроса.
webRequest.StreamFilter-
Объект, который можно использовать для мониторинга и изменения HTTP-ответов по мере их получения.
webRequest.UploadData-
Содержит данные, загруженные в запросе URL.
Свойства
webRequest.MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES-
Максимальное количество вызовов
handlerBehaviorChanged()в течение 10 минут.
Методы
webRequest.handlerBehaviorChanged()-
Этот метод можно использовать для обеспечения правильного применения обработчиков событий, когда страницы находятся в кэше браузера в оперативной памяти.
webRequest.filterResponseData()-
Возвращает объект
webRequest.StreamFilterдля заданного запроса. webRequest.getSecurityInfo()-
Получает подробную информацию о подключении TLS, связанном с заданным запросом.
События
webRequest.onBeforeRequest-
Вызывается, когда запрос собирается быть выполнен, и перед тем, как доступны заголовки. Это хорошее место для прослушивания, если вы хотите отменить или перенаправить запрос.
webRequest.onBeforeSendHeaders-
Вызывается перед отправкой любых данных HTTP, но после того, как доступны заголовки HTTP. Это хорошее место для прослушивания, если вы хотите изменить заголовки запроса HTTP.
webRequest.onSendHeaders-
Вызывается непосредственно перед отправкой заголовков. Если ваше дополнение или какое-то другое дополнение изменили заголовки в
, вы увидите изменённую версию здесь.onBeforeSendHeaders webRequest.onHeadersReceived-
Вызывается, когда были получены заголовки HTTP-ответа, связанные с запросом. Вы можете использовать это событие для изменения заголовков HTTP-ответа.
webRequest.onAuthRequired-
Вызывается, когда сервер запрашивает у клиента предоставить учетные данные для аутентификации. Прослушиватель может ничего не делать, отменить запрос или предоставить учетные данные для аутентификации.
webRequest.onResponseStarted-
Вызывается, когда первый байт тела ответа получен. Для HTTP-запросов это означает, что доступны строка состояния и заголовки ответа.
webRequest.onBeforeRedirect-
Вызывается, когда собирается произойти перенаправление, инициированное сервером.
webRequest.onCompleted-
Вызывается, когда запрос завершён.
webRequest.onErrorOccurred-
Вызывается, когда произошла ошибка.
Совместимость с браузерами
| Настольный | Мобильный | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | |
BlockingResponse |
Да | 14 | 45 | ? | Да | Нет | ? | ? | 48 | ? | Нет | ? |
CertificateInfo |
НетСм. ошибку 628819. |
Нет | 62 | ? | Нет | Нет | ? | ? | 62 | ? | Нет | ? |
HttpHeaders |
Да | 14 | 45 | ? | Да | 14 | ? | ? | 48 | ? | Нет | ? |
MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES |
Да | 14 | 45 | ? | Да | Нет | ? | ? | 48 | ? | Нет | ? |
RequestFilter |
ДаЕсли фильтр содержит нераспознанные значения в его свойствеtypes, addListener() выдает исключение. |
14Если фильтр содержит нераспознанные значения в его свойствеtypes, addListener() выдает исключение. |
45["Начиная с Firefox 78, если фильтр содержит нераспознанные значения в его свойствеtypes, то эти значения игнорируются, и addListener() продолжает работу.", "До Firefox 78, если фильтр содержит нераспознанные значения в его свойстве types, addListener() выдает исключение."] |
? | ДаЕсли фильтр содержит нераспознанные значения в его свойствеtypes, addListener() выдает исключение. |
14 | ? | ? | 48Если фильтр содержит нераспознанные значения в его свойствеtypes, addListener() выдает исключение. |
? | Нет | ? |
ResourceType |
44 | 79 | 45 | ? | 31 | Нет | ? | ? | 48 | ? | Нет | ? |
SecurityInfo |
Нет | Нет | 62 | ? | Нет | Нет | ? | ? | 62 | ? | Нет | ? |
StreamFilter |
Нет | Нет | 57 | ? | Нет | Нет | ? | ? | 57 | ? | Нет | ? |
UploadData |
Да | 14 | 45 | ? | Да | Нет | ? | ? | 48 | ? | Нет | ? |
filterResponseData |
Нет | Нет | 57 | ? | Нет | Нет | ? | ? | 57 | ? | Нет | ? |
getSecurityInfo |
НетСм. ошибку 628819. |
Нет | 62 | ? | Нет | Нет | ? | ? | 62 | ? | Нет | ? |
handlerBehaviorChanged |
Да | 14 | 45 | ? | Да | Нет | ? | ? | 48 | ? | Нет | ? |
onAuthRequired |
Да | 14 | 54Для асинхронной обработки запроса верните Promise из обработчика. |
? | Да | 14extraInfoSpec параметры не поддерживаются. |
? | ? | 54Для асинхронной обработки запроса верните Promise из обработчика. |
? | Нет | ? |
onBeforeRedirect |
Да | 14 | 46 | ? | Да | 14extraInfoSpec параметры не поддерживаются. |
? | ? | 48 | ? | Нет | ? |
onBeforeRequest |
ДаАсинхронные обработчики событий не поддерживаются. |
14Асинхронные обработчики событий не поддерживаются. |
46Асинхронные обработчики событий поддерживаются начиная с версии 52. |
? | ДаАсинхронные обработчики событий не поддерживаются. |
14extraInfoSpec параметры не поддерживаются. |
? | ? | 48Асинхронные обработчики событий поддерживаются начиная с версии 52. |
? | Нет | ? |
onBeforeSendHeaders |
ДаАсинхронные обработчики событий не поддерживаются. |
14Асинхронные обработчики событий не поддерживаются. |
45Асинхронные обработчики событий поддерживаются начиная с версии 52. |
? | ДаАсинхронные обработчики событий не поддерживаются. |
14extraInfoSpec параметры не поддерживаются. |
? | ? | 48Асинхронные обработчики событий поддерживаются начиная с версии 52. |
? | Нет | ? |
onCompleted |
Да | 14 | 45 | ? | Да | 14extraInfoSpec параметры не поддерживаются. |
? | ? | 48 | ? | Нет | ? |
onErrorOccurred |
Да | 14 | 45 | ? | Да | 14extraInfoSpec параметры не поддерживаются. |
? | ? | 48 | ? | Нет | ? |
onHeadersReceived |
ДаАсинхронные обработчики событий не поддерживаются. |
14Асинхронные обработчики событий не поддерживаются. |
45["Изменение заголовка 'Content-Type' поддерживается начиная с версии 51.", "Асинхронные обработчики событий поддерживаются начиная с версии 52."] |
? | ДаАсинхронные обработчики событий не поддерживаются. |
14extraInfoSpec параметры не поддерживаются. |
? | ? | 48["Изменение заголовка 'Content-Type' поддерживается начиная с версии 51.", "Асинхронные обработчики событий поддерживаются начиная с версии 52."] |
? | Нет | ? |
onResponseStarted |
Да | 14 | 45 | ? | Да | 14extraInfoSpec параметры не поддерживаются. |
? | ? | 48 | ? | Нет | ? |
onSendHeaders |
Да | 14 | 45 | ? | Да | 14extraInfoSpec параметры не поддерживаются. |
? | ? | 48 | ? | Нет | ? |
Примеры расширений
Примечание: Этот API основан на API chrome.webRequest Chromium. Данная документация получена из файла web_request.json кода Chromium.
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest