declarativeNetRequest
Этот API позволяет расширениям получать информацию о декларативных правилах, блокирующих или изменяющих сетевые запросы, и изменять эти правила. Использование декларативных правил означает, что расширения не перехватывают и не просматривают содержимое запросов, что обеспечивает большую конфиденциальность.
Разрешения
Для использования этого API расширение должно запросить разрешения "declarativeNetRequest" или "declarativeNetRequestWithHostAccess" в файле разрешений своего manifest.json файла.
Разрешение "declarativeNetRequest" позволяет расширениям блокировать и улучшать запросы без каких-либо разрешений на хостинг. Разрешения на хостинг необходимы, если расширение хочет перенаправить запрос или изменить заголовки запроса. Разрешение "declarativeNetRequestWithHostAccess" требует разрешений на хостинг для URL запроса и инициатора, чтобы действовать по запросу.
Разрешение "declarativeNetRequestFeedback" необходимо для использования getMatchedRules и onRuleMatchedDebug, так как они возвращают информацию о сопоставленных декларативных правилах. Дополнительная информация приведена в разделе Тестирование.
Правила
Декларативные правила определяются четырьмя полями:
-
id– Идентификатор, уникально определяющий правило в наборе правил. Обязателен и должен быть >= 1. -
priority– Приоритет правила. Если указан, должен быть >= 1. По умолчанию равен 1. Подробности о влиянии приоритета на применение правил см. в разделе Порядок применения правил. -
condition–conditionусловия, при которых срабатывает это правило. -
action–actionдействия, которые необходимо выполнить при совпадении правила. Правила могут выполнять следующие действия:- блокировать сетевой запрос.
- перенаправить сетевой запрос.
- изменять заголовки сетевого запроса.
- препятствовать применению другого соответствующего правила.
Вот пример правила, которое блокирует все запросы скриптов, исходящие от "foo.com", к любому URL, содержащему "abc" в качестве подстроки:
{ "id" : 1, "priority": 1, "action" : { "type" : "block" }, "condition" : { "urlFilter" : "abc", "domains" : ["foo.com"], "resourceTypes" : ["script"] } }
Поле urlFilter условия правила используется для указания шаблона, который сопоставляется с URL запроса. Подробности см. в разделе RuleCondition. Вот несколько примеров фильтров URL:
urlFilter | Совпадает с | Не совпадает с |
|---|---|---|
"abc" | https://abcd.com https://example.com/abcd | https://ab.com |
"abc*d" | https://abcd.com https://example.com/abcxyzd | https://abc.com |
"||a.example.com" | https://a.example.com/ https://b.a.example.com/xyz | https://example.com/ |
"|https*" | https://example.com | http://example.com/ http://https.com |
Наборы правил
Правила организованы в наборы правил:
-
статические наборы правил: коллекции правил, определенные с помощью ключа
"declarative_net_request"манифеста и хранящиеся в расширении. Расширение может включать и отключать статические наборы правил с помощьюupdateEnabledRulesets. Набор включенных статических наборов правил сохраняется между сеансами, но не между обновлениями расширения. Статические наборы правил, включенные при установке и обновлении расширения, определяются содержимым ключа манифеста"declarative_net_request". -
динамический набор правил: правила, добавляемые или удаляемые с помощью
updateDynamicRules. Эти правила сохраняются между сеансами и обновлениями расширения. -
набор правил сеанса: правила, добавляемые или удаляемые с помощью
updateSessionRules. Эти правила не сохраняются между сеансами браузера.
Примечание: Ошибки и предупреждения о недопустимых статических правилах отображаются только во время тестирования. Недопустимые статические правила в постоянно установленных расширениях игнорируются. Поэтому важно проверить, что ваши статические наборы правил допустимы, выполнив тестирование.
Ограничения
Ограничения наборов статических правил
Расширение может:
- указать статические наборы правил в качестве части ключа манифеста
"declarative_net_request"до значенияMAX_NUMBER_OF_STATIC_RULESETS. - включить статические наборы правил не менее чем до значения
GUARANTEED_MINIMUM_STATIC_RULES, и количество включенных наборов статических правил не должно превышать значения [MAX_NUMBER_OF_ENABLED_STATIC_RULESETS. Кроме того, общее количество правил во включенных наборах статических правил для всех расширений не должно превышать глобального лимита. Расширения не должны зависеть от конкретного значения глобального лимита, а вместо этого должны использоватьgetAvailableStaticRuleCount, чтобы определить количество дополнительных правил, которые они могут включить.
Динамические и правила с областью действия сеанса
Количество динамических и правил с областью действия сеанса, которое может добавить расширение, ограничено значением MAX_NUMBER_OF_DYNAMIC_AND_SESSION_RULES.
Порядок применения правил
При оценке браузером обработки запросов проверяются правила каждого расширения, у которых условие соответствует запросу, и выбирается правило для применения следующим образом:
- приоритет правила, где 1 — наименьший приоритет (и правила по умолчанию имеют приоритет 1, если приоритет не задан). Если это не приводит к выбору одного правила:
- действие правила в следующем порядке приоритета:
- "разрешить", что означает, что любые другие оставшиеся правила игнорируются.
- "разрешить все запросы" (только для типов ресурсов main_frame и sub_frame) имеет тот же эффект, что и "разрешить", но также применяется к будущим загрузкам дочерних ресурсов в документе (включая дочерние фреймы), сгенерированные из запроса.
- "заблокировать" отменяет запрос.
- "upgradeScheme" изменяет схему запроса.
- "перенаправить" перенаправляет запрос.
- "изменить заголовки" переписывает заголовки запроса и ответа. Если это не приводит к выбору одного правила:
- набор правил, к которому принадлежит правило, в следующем порядке приоритета:
- сеанс
- динамический
- статический. Если это не приводит к выбору одного правила:
- порядок правила в наборе правил, определяемый как правило с наименьшим значением ID.
Если только одно расширение предоставляет правило для запроса, это правило применяется. Однако, если более чем одно расширение имеет соответствующее правило, браузер выбирает правило для применения в следующем порядке приоритета:
- "заблокировать"
- "перенаправить" и "upgradeScheme"
- "разрешить" и "разрешить все запросы"
Если запрос не был заблокирован или перенаправлен, применяются соответствующие действия modifyHeaders , как описано в declarativeNetRequest.ModifyHeaderInfo.
Тестирование
testMatchOutcome, getmatchedrules и onRuleMatchedDebug доступны для помощи в тестировании правил и наборов правил. Для этих API требуется разрешение "declarativeNetRequestFeedback" разрешений. Кроме того:
- в Chrome эти API доступны только для распакованных расширений.
- в Firefox эти API доступны только после установки значения предпочтения
extensions.dnr.feedbackвtrue. Измените это предпочтение с помощьюabout:configили--prefфлагаweb-extинструмента командной строки.
Сравнение с API webRequest
- API declarativeNetRequest оценивает сетевые запросы непосредственно в браузере. Это делает его более производительным, чем API webRequest, где каждый сетевой запрос оценивается в JavaScript в процессе расширения.
- Поскольку запросы не перехватываются процессом расширения, declarativeNetRequest устраняет необходимость в странице фона для расширений.
- В отличие от API webRequest, блокировка или улучшение запросов с помощью API declarativeNetRequest не требует разрешений на хостинг при использовании разрешения
declarativeNetRequest. - API declarativeNetRequest обеспечивает большую конфиденциальность для пользователей, поскольку расширения не читают сетевые запросы, выполняемые от имени пользователя.
- (Только Chrome:) В отличие от API webRequest, любые изображения или фреймы iframes, заблокированные с помощью API declarativeNetRequest, автоматически сворачиваются в DOM.
- При решении вопроса о блокировке или перенаправлении запроса API declarativeNetRequest имеет приоритет над API webRequest, поскольку он позволяет синхронный перехват. Аналогично, любые заголовки, удаленные через API declarativeNetRequest, не отображаются для расширений web request.
- API webRequest более гибкий, чем API declarativeNetRequest, поскольку он позволяет расширениям программно оценивать запрос.
Типы
declarativeNetRequest.MatchedRule-
Подробности сопоставленного правила.
declarativeNetRequest.ModifyHeaderInfo-
Заголовки запроса или ответа, которые необходимо изменить для запроса.
declarativeNetRequest.Redirect-
Подробности о том, как выполнить переадресацию. Действительно только для правил переадресации.
declarativeNetRequest.ResourceType-
Тип ресурса запроса.
declarativeNetRequest.Rule-
Объект, содержащий подробности правила.
declarativeNetRequest.RuleAction-
Объект, определяющий действие, которое должно быть выполнено при совпадении правила.
declarativeNetRequest.RuleCondition-
Объект, определяющий условие, при котором запускается правило.
declarativeNetRequest.URLTransform-
Объект, содержащий подробности преобразования URL для действия переадресации.
Свойства
declarativeNetRequest.DYNAMIC_RULESET_ID-
Идентификатор набора правил для динамических правил, добавленных расширением.
declarativeNetRequest.GETMATCHEDRULES_QUOTA_INTERVAL-
Интервал времени, в течение которого можно выполнить вызовы
declarativeNetRequest.MAX_GETMATCHEDRULES_CALLS_PER_INTERVALdeclarativeNetRequest.getMatchedRules. declarativeNetRequest.GUARANTEED_MINIMUM_STATIC_RULES-
Минимальное количество статических правил, гарантированное для расширения во всех включённых наборах статических правил.
declarativeNetRequest.MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL-
Количество вызовов
declarativeNetRequest.getMatchedRules, которые можно выполнить в течение периодаdeclarativeNetRequest.GETMATCHEDRULES_QUOTA_INTERVAL. declarativeNetRequest.MAX_NUMBER_OF_DYNAMIC_AND_SESSION_RULES-
Максимальное количество динамических и сеансовых правил, которые может добавить расширение.
declarativeNetRequest.MAX_NUMBER_OF_ENABLED_STATIC_RULESETS-
Максимальное количество наборов статических правил, которые может включить расширение.
declarativeNetRequest.MAX_NUMBER_OF_REGEX_RULES-
Максимальное количество правил с использованием регулярных выражений, которые может добавить расширение.
declarativeNetRequest.MAX_NUMBER_OF_STATIC_RULESETS-
Максимальное количество наборов статических правил, которые расширение может указать в качестве части ключа
declarative_net_request.rule_resourcesманифеста. declarativeNetRequest.SESSION_RULESET_ID-
Идентификатор набора правил для сеансовых правил, добавленных расширением.
Функции
declarativeNetRequest.getAvailableStaticRuleCount()-
Возвращает количество статических правил, которые может включить расширение, прежде чем будет достигнут глобальный лимит статических правил.
declarativeNetRequest.getDynamicRules()-
Возвращает набор динамических правил для расширения.
declarativeNetRequest.getEnabledRulesets()-
Возвращает идентификаторы набора включённых наборов статических правил.
declarativeNetRequest.getMatchedRules()-
Возвращает все сопоставленные правила для расширения.
declarativeNetRequest.getSessionRules()-
Возвращает набор сеансовых правил для расширения.
declarativeNetRequest.isRegexSupported()-
Проверяет, поддерживается ли регулярное выражение в качестве условия
declarativeNetRequest.RuleCondition.regexFilterправила. declarativeNetRequest.setExtensionActionOptions()-
Настраивает обработку счётчика действий для вкладок.
declarativeNetRequest.testMatchOutcome()-
Проверяет, будут ли совпадать какие-либо из правил расширения с гипотетическим запросом.
declarativeNetRequest.updateDynamicRules()-
Изменяет активный набор динамических правил для расширения.
declarativeNetRequest.updateEnabledRulesets()-
Обновляет набор активных наборов статических правил для расширения.
declarativeNetRequest.updateSessionRules()-
Изменяет набор сеансовых правил для расширения.
События
declarativeNetRequest.onRuleMatchedDebug-
Вызывается, когда правило сопоставляется с запросом во время отладки расширения с разрешением "declarativeNetRequestFeedback".
Совместимость с браузерами
| Настольный | Мобильный | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
DYNAMIC_RULESET_ID |
84 | 84 | No | ? | 70 | No | ? | ? | No | ? | No | ? |
GETMATCHEDRULES_QUOTA_INTERVAL |
84 | 84 | No | ? | 70 | No | ? | ? | No | ? | No | ? |
GUARANTEED_MINIMUM_STATIC_RULES |
89 | 89 | No | ? | 75 | No | ? | ? | No | ? | No | ? |
MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL |
84 | 84 | No | ? | 70 | No | ? | ? | No | ? | No | ? |
MAX_NUMBER_OF_DYNAMIC_AND_SESSION_RULES |
90 | 90 | No | ? | 76 | 16.4 | ? | ? | No | ? | 16.4 | ? |
MAX_NUMBER_OF_ENABLED_STATIC_RULESETS |
94 | 94 | No | ? | 80 | preview | ? | ? | No | ? | No | ? |
MAX_NUMBER_OF_REGEX_RULES |
84 | 84 | No | ? | 70 | No | ? | ? | No | ? | No | ? |
MAX_NUMBER_OF_STATIC_RULESETS |
84 | 84 | No | ? | 70 | 15 | ? | ? | No | ? | 15 | ? |
MatchedRule |
84 | 84 | No | ? | 70 | No | ? | ? | No | ? | No | ? |
Redirect |
84 | 84 | No | ? | 70 | 15.4 | ? | ? | No | ? | 15.4 | ? |
ResourceType |
84 | 84 | No | ? | 70 | 15 | ? | ? | No | ? | 15 | ? |
Rule |
84 | 84 | No | ? | 70 | 15 | ? | ? | No | ? | 15 | ? |
RuleAction |
84 | 84 | No | ? | 70 | 15 | ? | ? | No | ? | 15 | ? |
RuleCondition |
84 | 84 | No | ? | 70 | 15 | ? | ? | No | ? | 15 | ? |
SESSION_RULESET_ID |
90 | 90 | No | ? | 76 | No | ? | ? | No | ? | No | ? |
URLTransform |
84 | 84 | No | ? | 70 | 15.4 | ? | ? | No | ? | 15.4 | ? |
getAvailableStaticRuleCount |
89 | 89 | No | ? | 75 | No | ? | ? | No | ? | No | ? |
getDynamicRules |
84 | 84 | No | ? | 70 | 15.4 | ? | ? | No | ? | 15.4 | ? |
getEnabledRulesets |
84 | 84 | No | ? | 70 | 15 | ? | ? | No | ? | 15 | ? |
getMatchedRules |
84 | 84 | No | ? | 70 | 15.4 | ? | ? | No | ? | 15.4 | ? |
getSessionRules |
90 | 90 | No | ? | 76 | 15.4 | ? | ? | No | ? | 15.4 | ? |
isRegexSupported |
87 | 87 | No | ? | 73 | 15 | ? | ? | No | ? | 15 | ? |
onRuleMatchedDebug |
84Available only to unpacked extensions. |
84Available only to unpacked extensions. |
No | ? | 70Available only to unpacked extensions. |
No | ? | ? | No | ? | No | ? |
setExtensionActionOptions |
88 | 88 | No | ? | 74 | 16.4 | ? | ? | No | ? | 16.4 | ? |
testMatchOutcome |
103 | 103 | No | ? | 89 | No | ? | ? | No | ? | No | ? |
updateDynamicRules |
84 | 84 | No | ? | 70 | 15.4 | ? | ? | No | ? | 15.4 | ? |
updateEnabledRulesets |
84 | 84 | No | ? | 70 | 15 | ? | ? | No | ? | 15 | ? |
updateSessionRules |
90 | 90 | No | ? | 76 | 15.4 | ? | ? | No | ? | 15.4 | ? |
© 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/declarativeNetRequest