Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
declarativeNetRequest
Diese API ermöglicht es Erweiterungen, Bedingungen und Aktionen festzulegen, die beschreiben, wie Netzwerkanforderungen behandelt werden sollen. Diese deklarativen Regeln ermöglichen es dem Browser, Netzwerkanforderungen zu evaluieren und zu modifizieren, ohne die Erweiterungen über einzelne Netzwerkanforderungen zu benachrichtigen.
In diesem Artikel
Berechtigungen
Um diese API zu verwenden, muss eine Erweiterung die Berechtigung"declarativeNetRequest" oder"declarativeNetRequestWithHostAccess" in ihrermanifest.json Datei anfordern. Die Berechtigung"declarativeNetRequest" wird den Benutzern in den Berechtigungsaufforderungen angezeigt, die Berechtigung"declarativeNetRequestWithHostAccess" jedoch nicht.
Die Berechtigung"declarativeNetRequest" erlaubt es Erweiterungen, Anfragen zu blockieren und zu aktualisieren, ohne dassHost-Berechtigungen erforderlich sind. Host-Berechtigungen werden benötigt, wenn die Erweiterung Anfragen umleiten oder Header von Anfragen ändern möchte oder wenn die Berechtigung"declarativeNetRequestWithHostAccess" anstelle der Berechtigung"declarativeNetRequest" verwendet wird. Um Anfragen in diesen Fällen zu bearbeiten, sind Host-Berechtigungen für die Anfrage-URL erforderlich. Für alle Anfragen, außer für Navigationsanfragen (d.h. Ressourcentypmain_frame undsub_frame), sind auch Host-Berechtigungen für den Initiator der Anfrage erforderlich. Der Initiator einer Anfrage ist normalerweise das Dokument oder der Worker, der die Anfrage ausgelöst hat.
Einige Anfragen sind eingeschränkt und können nicht von Erweiterungen abgeglichen werden. Dazu gehören privilegierte Browseranfragen, Anfragen zu oder voneingeschränkten Domänen und Anfragen von anderen Erweiterungen.
Die Berechtigung"declarativeNetRequestFeedback" ist erforderlich, umgetMatchedRules undonRuleMatchedDebug zu verwenden, da sie Informationen über übereinstimmende deklarative Regeln zurückgeben. Weitere Informationen finden Sie unterTesting.
Regeln
Die deklarativen Regeln werden durch vier Felder definiert:
id– Eine ID, die eine Regel innerhalb eines Regelsets eindeutig identifiziert. Erforderlich und sollte >= 1 sein.priority– Die Regelpriorität. Wenn angegeben, sollte sie >= 1 sein. Standardmäßig 1. SieheMatching precedence für Details, wie sich die Priorität darauf auswirkt, welche Regeln angewendet werden.condition– Diecondition, unter der diese Regel ausgelöst wird.action– Dieaction, die ausgeführt werden soll, wenn die Regel übereinstimmt. Regeln können Folgendes tun:- eine Netzwerk-Anfrage blockieren.
- eine Netzwerk-Anfrage umleiten.
- Header einer Netzwerk-Anfrage ändern.
- verhindern, dass eine andere übereinstimmende Regel angewendet wird.
Hinweis:Eine Umleitungsaktion leitet die Anfrage nicht um und die Anfrage wird normal fortgesetzt, wenn:
- die Aktion die Anfrage nicht ändert.
- die Umleitungs-URL ungültig ist (z. B. der Wert von
redirect.regexSubstitutionkeine gültige URL ist).
Dies ist eine Beispielregel, die alle Skript-Anfragen blockiert, die von"example.com" zu jeder URL mit"abc" als Teilzeichenfolge ausgehen:
{ "id": 1, "priority": 1, "action": { "type": "block" }, "condition": { "urlFilter": "abc", "initiatorDomains": ["example.com"], "resourceTypes": ["script"] }}DasurlFilter-Feld einer Regelbedingung wird verwendet, um das Muster anzugeben, das mit der Anfrage-URL abgeglichen wird. Weitere Details finden Sie unterRuleCondition. Einige Beispiele für URL-Filter sind:
urlFilter | Stimmt überein mit | Stimmt nicht überein mit |
|---|---|---|
"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 |
Regelsets
Regeln werden in Regelsets organisiert:
- statische Regelsets: Sammlungen von Regeln, die mit dem Schlüssel
"declarative_net_request"im Manifest definiert und in der Erweiterung gespeichert sind. Eine Erweiterung kann statische Regelsets mitupdateEnabledRulesetsaktivieren und deaktivieren. Der Satz aktivierter statischer Regelsets wird über Sitzungen hinweg beibehalten, nicht jedoch über Erweiterungsaktualisierungen. Die aktivierten statischen Regelsets bei der Installation und Aktualisierung der Erweiterung werden durch den Inhalt des"declarative_net_request"Manifests bestimmt. - dynamisches Regelset: Regeln, die mit
updateDynamicRuleshinzugefügt oder entfernt werden. Diese Regeln bleiben über Sitzungen und Erweiterungsaktualisierungen hinweg bestehen. - Sitzungsregelset: Regeln, die mit
updateSessionRuleshinzugefügt oder entfernt werden. Diese Regeln bleiben nicht über Browsersitzungen hinweg bestehen.
Hinweis:Fehler und Warnungen zu ungültigen statischen Regeln werden nur während derTesting angezeigt. Ungültige statische Regeln in dauerhaft installierten Erweiterungen werden ignoriert. Daher ist es wichtig, zu überprüfen, ob Ihre statischen Regelsets gültig sind, indem Sie sie testen.
Grenzen
>Grenzen für statische Regelsets
Eine Erweiterung kann:
- statische Regelsets im
"declarative_net_request"Manifest-Schlüssel bis zu dem Wert vonMAX_NUMBER_OF_STATIC_RULESETSangeben. - statische Regelsets aktivieren (im
"declarative_net_request"Manifest-Schlüssel oder programmgesteuert), sodass die Anzahl der Regeln (aktiviert oder deaktiviert), die sie enthalten, den Wert vonGUARANTEED_MINIMUM_STATIC_RULESnicht überschreitet und die Anzahl der aktivierten statischen Regelsets den Wert vonMAX_NUMBER_OF_ENABLED_STATIC_RULESETSnicht übersteigt.Hinweis:Die Anzahl der Regeln in aktivierten statischen Regelsets für alle Erweiterungen darf das globale Limit nicht überschreiten. Erweiterungen sollten sich nicht darauf verlassen, dass das globale Limit einen bestimmten Wert hat; stattdessen sollten sie
getAvailableStaticRuleCountverwenden, um die Anzahl der zusätzlichen Regeln zu ermitteln, die sie aktivieren können. - Regeln in statischen Regelsets bis zu dem Wert von
MAX_NUMBER_OF_DISABLED_STATIC_RULESdeaktivieren. Diese deaktivierten Regeln zählen jedoch zu denGUARANTEED_MINIMUM_STATIC_RULES.
Dynamische und Sitzungsregeln
Die Anzahl der dynamischen und auf Sitzungen beschränkten Regeln, die eine Erweiterung hinzufügen kann, ist begrenzt auf:
- In Safari und bis Chrome 119 und Firefox 127 auf den Wert von
MAX_NUMBER_OF_DYNAMIC_AND_SESSION_RULES. - Ab Chrome 120 und Firefox 128 auf die Werte von
MAX_NUMBER_OF_DYNAMIC_RULESundMAX_NUMBER_OF_SESSION_RULES
Matching Precedence
Wenn der Browser evaluiert, wie Anfragen behandelt werden sollen, überprüft er die Regeln jeder Erweiterung, die eine Bedingung aufweisen, die der Anfrage entspricht, und wählt die Regel, die in Betracht gezogen werden soll, wie folgt:
- die Regelpriorität, wobei 1 die niedrigste Priorität ist (und Regeln standardmäßig auf 1 gesetzt sind, wenn keine Priorität festgelegt ist).
Wenn dies zu keiner spezifischen Regelanwendung führt: - die Regelaktion, in folgender Reihenfolge der Vorrangigkeit:
- "allow", was bedeutet, dass alle anderen verbleibenden Regeln ignoriert werden.
- "allowAllRequests" (nur für die Ressourcentypen main_frame und sub_frame) hat die gleiche Wirkung wie allow, gilt aber auch für zukünftige Subressourcenladevorgänge im Dokument (einschließlich nachgeordneter Frames), die aus der Anfrage generiert werden.
- "block" storniert die Anfrage.
- "upgradeScheme" aktualisiert das Schema der Anfrage.
- "redirect" leitet die Anfrage um.
- "modifyHeaders" ändert Header in Anfragen oder Antworten oder beides.
Hinweis:Wenn mehrere übereinstimmende Regeln die gleiche Regelpriorität und den gleichen Regelaktionstyp haben, kann das Ergebnis nicht eindeutig sein, wenn die übereinstimmte Aktion zusätzliche Eigenschaften unterstützt. Diese Eigenschaften können zu Ergebnissen führen, die nicht kombiniert werden können. Zum Beispiel:
- Die "block"-Aktion unterstützt keine zusätzlichen Eigenschaften und daher besteht keine Mehrdeutigkeit: Alle übereinstimmenden "block"-Aktionen würden zum gleichen Ergebnis führen.
- Die "redirect"-Aktion leitet eine Anfrage zu einem Ziel um. Wenn mehrere "redirect"-Aktionen übereinstimmen, wird jede bis auf eine "redirect"-Aktion ignoriert. Es ist immer noch möglich, wiederholt umzuleiten, wenn die umgeleitete Anfrage einer anderen Regelbedingung entspricht.
- Mehrere "modifyHeaders"-Aktionen können unabhängig angewendet werden, wenn sie unterschiedliche Header betreffen. Das Ergebnis ist mehrdeutig, wenn sie denselben Header betreffen, da einige Kombinationen von Operationen nicht erlaubt sind (wie in
declarativeNetRequest.ModifyHeaderInfoerklärt). Die Evaluationsreihenfolge von "modifyHeaders"-Aktionen ist daher wichtig.
Um die Reihenfolge zu kontrollieren, in der Aktionen angewendet werden, weisen Sie Regeln unterschiedlichepriority-Werte zu, deren Reihenfolge wichtig ist.
Hinweis:Nach Regelpriorität und Regelaktion berücksichtigt Firefox das Regelset, zu dem die Regel gehört, in dieser Vorrangreihenfolge: Sitzung > dynamisch > statische Regelsets.Dies kann nicht browserübergreifend als zuverlässig angesehen werden, sieheWECG issue 280.
Wenn nur eine Erweiterung eine Regel für die Anfrage bereitstellt, wird diese Regel angewendet. Wenn jedoch mehr als eine Erweiterung eine übereinstimmende Regel hat, wählt der Browser die anzuwendende Regel in folgender Vorrangreihenfolge:
- "block"
- "redirect" und "upgradeScheme"
- "allow" und "allowAllRequests"
Wenn die Anfrage nicht blockiert oder umgeleitet wurde, werden die übereinstimmendenmodifyHeaders-Aktionen angewendet, wie indeclarativeNetRequest.ModifyHeaderInfo dokumentiert.
Testing
testMatchOutcome,getMatchedRules, undonRuleMatchedDebug stehen zur Verfügung, um beim Testen von Regeln und Regelsets zu helfen. Diese APIs erfordern die Berechtigung"declarativeNetRequestFeedback". Darüber hinaus:
- In Chrome sind diese APIs nur für entpackte Erweiterungen verfügbar.
- In Firefox sind diese APIs nur verfügbar, wenn die
extensions.dnr.feedback-Voreinstellung auftruegesetzt ist. Diese Einstellung kann mitabout:configoder dem--pref-Flag desweb-extCLI-Tools gesetzt werden.
Vergleich mit der webRequest-API
- Die declarativeNetRequest API evaluiert Netzwerk-Anfragen direkt im Browser. Dies macht sie leistungsfähiger als die webRequest API, bei der jede Netzwerk-Anfrage im JavaScript im Erweiterungsprozess evaluiert wird.
- Da die Anfragen nicht vom Erweiterungsprozess abgefangen werden, entfällt die Notwendigkeit für Erweiterungen, eine Hintergrundseite zu haben, wenn die declarativeNetRequest API verwendet wird.
- Im Gegensatz zur webRequest API erfordert das Blockieren oder Aktualisieren von Anfragen mit der declarativeNetRequest API keine Host-Berechtigungen, wenn sie mit der Berechtigung
declarativeNetRequestverwendet wird. - Die declarativeNetRequest API bietet Benutzern mehr Privatsphäre, da Erweiterungen die im Namen des Nutzers erstellten Netzwerk-Anfragen nicht lesen.
- (Nur Chrome:) Im Gegensatz zur webRequest API werden alle Bilder oder iframes, die mit der declarativeNetRequest API blockiert werden, automatisch im DOM zusammengeklappt.
- Bei der Entscheidung, ob eine Anfrage blockiert oder umgeleitet werden soll, hat die declarativeNetRequest API gegenüber der webRequest API Vorrang, da sie eine synchrone Abfangmöglichkeit bietet. Ebenso werden Header, die über die declarativeNetRequest API entfernt wurden, den Webanfrageerweiterungen nicht sichtbar gemacht.
- Die webRequest API ist flexibler als die declarativeNetRequest API, da sie es den Erweiterungen ermöglicht, eine Anfrage programmatisch zu evaluieren.
Typen
declarativeNetRequest.HeaderInfoDer Antwort-Header, der für die Anfrage abgeglichen wird, deklariert im
rule.condition.excludedResponseHeaders-Array oder imrule.condition.responseHeaders-Array.declarativeNetRequest.MatchedRuleDetails einer übereinstimmenden Regel.
declarativeNetRequest.ModifyHeaderInfoDie Anfrage- oder Antwort-Header, die für die Anfrage geändert werden sollen.
declarativeNetRequest.RedirectDetails, wie die Umleitung durchgeführt werden sollte. Nur gültig für Umleitungsregeln.
declarativeNetRequest.ResourceTypeDer Ressourcentyp einer Anfrage.
declarativeNetRequest.RuleEin Objekt, das die Details einer Regel enthält.
declarativeNetRequest.RuleActionEin Objekt, das die Aktion definiert, die durchgeführt werden soll, wenn eine Regel übereinstimmt.
declarativeNetRequest.RuleConditionEin Objekt, das die Bedingung definiert, unter der eine Regel ausgelöst wird.
declarativeNetRequest.URLTransformEin Objekt, das die Details einer URL-Transformation für eine Umleitungsaktion enthält.
Eigenschaften
declarativeNetRequest.DYNAMIC_RULESET_IDDie Regelset-ID für die von der Erweiterung hinzugefügten dynamischen Regeln.
declarativeNetRequest.GETMATCHEDRULES_QUOTA_INTERVALDas Zeitintervall, innerhalb dessen
declarativeNetRequest.MAX_GETMATCHEDRULES_CALLS_PER_INTERVALdeclarativeNetRequest.getMatchedRulesAufrufe gemacht werden können.declarativeNetRequest.GUARANTEED_MINIMUM_STATIC_RULESDie Mindestanzahl statischer Regeln, die einer Erweiterung über ihre aktivierten statischen Regelsets garantiert sind.
declarativeNetRequest.MAX_GETMATCHEDRULES_CALLS_PER_INTERVALDie Anzahl der Male, die
declarativeNetRequest.getMatchedRulesinnerhalb eines Zeitraums vondeclarativeNetRequest.GETMATCHEDRULES_QUOTA_INTERVALaufgerufen werden kann.declarativeNetRequest.MAX_NUMBER_OF_DISABLED_STATIC_RULESDie maximale Anzahl statischer Regeln, die in jedem statischen Regelset deaktiviert werden können.
declarativeNetRequest.MAX_NUMBER_OF_DYNAMIC_AND_SESSION_RULESVeraltetDie maximale Anzahl dynamischer und auf Sitzungen beschränkter Regeln, die eine Erweiterung hinzufügen kann.
declarativeNetRequest.MAX_NUMBER_OF_DYNAMIC_RULESDie maximale Anzahl dynamischer Regeln, die eine Erweiterung hinzufügen kann.
declarativeNetRequest.MAX_NUMBER_OF_ENABLED_STATIC_RULESETSDie maximale Anzahl statischer Regelsets, die eine Erweiterung aktivieren kann.
declarativeNetRequest.MAX_NUMBER_OF_REGEX_RULESDie maximale Anzahl an regulären Ausdrucksregeln, die eine Erweiterung hinzufügen kann.
declarativeNetRequest.MAX_NUMBER_OF_SESSION_RULESDie maximale Anzahl an auf Sitzungen beschränkten Regeln, die eine Erweiterung hinzufügen kann.
declarativeNetRequest.MAX_NUMBER_OF_STATIC_RULESETSDie maximale Anzahl an statischen Regelsets, die eine Erweiterung als Teil des
declarative_net_request.rule_resourcesManifest-Schlüssels angeben kann.declarativeNetRequest.SESSION_RULESET_IDDie Regelset-ID für die von der Erweiterung hinzugefügten auf Sitzungen beschränkten Regeln.
Funktionen
declarativeNetRequest.getAvailableStaticRuleCount()Gibt die Anzahl der statischen Regeln zurück, die eine Erweiterung aktivieren kann, bevor das globale statische Regel-Limit erreicht ist.
declarativeNetRequest.getDisabledRuleIds()Gibt die IDs der deaktivierten Regeln in einem statischen Regelset zurück.
declarativeNetRequest.getDynamicRules()Gibt die Menge an dynamischen Regeln für die Erweiterung zurück.
declarativeNetRequest.getEnabledRulesets()Gibt die IDs für die aktiven statischen Regelsets zurück.
declarativeNetRequest.getMatchedRules()Gibt alle übereinstimmenden Regeln für die Erweiterung zurück.
declarativeNetRequest.getSessionRules()Gibt die Menge der auf Sitzungen beschränkten Regeln für die Erweiterung zurück.
declarativeNetRequest.isRegexSupported()Überprüft, ob ein regulärer Ausdruck als
declarativeNetRequest.RuleCondition.regexFilterRegelbedingung unterstützt wird.declarativeNetRequest.setExtensionActionOptions()Konfiguriert, wie die Aktionsanzahl für Tabs gehandhabt wird.
declarativeNetRequest.testMatchOutcome()Überprüft, ob eine der
declarativeNetRequest-Regeln der Erweiterung eine hypothetische Anfrage übereinstimmen würde.declarativeNetRequest.updateDynamicRules()Ändert die aktive Menge an dynamischen Regeln für die Erweiterung.
declarativeNetRequest.updateEnabledRulesets()Aktualisiert die Menge an aktiven statischen Regelsets für die Erweiterung.
declarativeNetRequest.updateSessionRules()Ändert die Menge an auf Sitzungen beschränkten Regeln für die Erweiterung.
declarativeNetRequest.updateStaticRules()Ändert den aktivierten Zustand von Regeln in einem statischen Regelset.
Ereignisse
declarativeNetRequest.onRuleMatchedDebugWird ausgelöst, wenn eine Regel einer Anfrage zugeordnet wird, während das Debugging einer Erweiterung mit der Berechtigung "declarativeNetRequestFeedback" durchgeführt wird.