webRequest
websocket が ws:// や wss:// としてリクエストするものも含めた、HTTP リクエスト作成のいろいろなステージでイベントリスナーを追加します。イベントリスナーはリクエストの詳細情報を受け取ったり、リクエストを編集、修正したりします。
それぞれのイベントはリクエストの特定ステージで発生します。イベントの典型的なシーケンスは次のようなものです。

ただし、これらのイベントのすべてが拡張機能によって監視されるとは限りません。例えば、リダイレクト先がイベントの filter.urls と一致しない場合、onBeforeRedirect の後に onBeforeRequest が続かないことがあります。これは、フィルター内での URL の定義が狭すぎる場合や、data: URL へのリダイレクトなど、拡張機能ではリダイレクト先を監視できない場合などが考えられます。
onErrorOccurred はリクエストの期間中のあらゆる時に発生します。また注意点としてイベントシーケンスがこれと異なることもあります。例えば、Firefox では、HSTS 更新の時には、onBeforeRequest のすぐ後に onBeforeRedirect イベントが発生します。onErrorOccurred は Firefox トラッキング防止がリクエストをブロックした場合も発生します。
onErrorOccurred を除くすべてのイベントは addListener() への次の 3 つの引数を取ります。
- リスナー自身
filterオブジェクト、これを使って特定の URL や特定のリソースタイプにリクエストされた時だけに通知を受けられます。- オプションの
extraInfoSpecオブジェクト。これを使ってイベントに固有な追加の命令を渡せます。
リスナー関数はリクエストの情報を含む details オブジェクトを渡されます。これにはリクエスト ID が入っていて、その ID でアドオンは単一のリクエストとイベントを関連付けられます。これはブラウザーセッションとアドオンのコンテキストごとにユニークです。リダイレクトと認証交換であっても、リクエストを通じて同じ値を保ちます。
あるホストに webRequest API を使うには、拡張機能は "webRequest" API 権限 とそのホストの host 権限 を持たねばなりません。「ブロッキング」機能を使うためには、拡張機能は "webRequestBlocking" API 権限も必要です。
ページに読み込まれるリソース (例えば画像、スクリプト、スタイルシート) を中断するには、拡張機能はそのメインページと同様にリソースの host 権限も持っている必要があります。例えば、"https://developer.mozilla.org" のページが "https://mdn.mozillademos.org" から画像を読み込む場合、画像のリクエストを中断するには拡張機能は両方の host 権限を持たねばなりません。
リクエストを修正する
いくつかのイベントでは、リクエストを修正できます。特に、次のことが可能:
-
次の API でリクエストをキャンセル:
-
次の API でリクエストをリダイレクト:
-
次の API でリクエストヘッダーの修正:
-
次の API でレスポンスヘッダーの修正:
-
次の API で認証資格情報の提供:
これを行うには、イベント addListener() の extraInfoSpec の引数に"blocking"の値のオプションを渡す必要があります。これによりリスナーが同期します。
このリスナーでは BlockingResponse オブジェクトを返すことがあります。これは行うことが必要な変更を示します。例えば、送信したい修正後のリクエストヘッダーなどです。
ブラウザー起動時のリクエスト
"blocking" オプションを指定してリスナーを登録し、かつその登録が拡張機能の起動中に実行された場合、ブラウザーの起動中にそのリスナーに一致するリクエストが発生すると、拡張機能は早期に起動します。これにより、拡張機能はブラウザーの起動時にそのリクエストを監視することができます。これらの手順を実行しない場合、起動時に発生したリクエストを見逃してしまう可能性があります。
投機的リクエスト
ブラウザーは、URI へのリクエストがまもなく行われる可能性があると判断した場合、投機的接続を確立することがあります。この種の接続では有効なタブ情報が提供されないため、tabId、frameId、parentFrameId などのリクエストの詳細は不正確になります。これらの接続の webRequest.ResourceType は speculative となります。
セキュリティ情報へのアクセス
onHeadersReceived リスナー内では、getSecurityInfo() を呼ぶことで TLS にアクセスできます。これを行うには、イベントの addListener() の extraInfoSpec 引数に"blocking" を渡す必要もあります。
TLS ハンドシェイクについて詳しく読むことができますが、修正したり、ブラウザーのトラストな決定を上書きできません。
レスポンスの修正
webRequest.filterResponseData にリクエスト ID を渡すことで得られる webRequest.StreamFilter を使うと、ブラウザーが受け取った HTTP リクエストのレスポンス本文を検査したり修正したりすることができます。
そのためには、"webRequestBlocking" 権限と "webRequest" API 権限 、さらに修正したい対象のリクエスト URL にあてはまる host 権限を得ている必要があります。
型
webRequest.BlockingResponse-
この型のオブジェクトは、イベントリスナーによって
extraInfoSpec引数にて"blocking"をセットして返されます。BlockingResponseプロパティに特定の値をセットすることで、リスナーはネットワークリクエストを変更できます。 webRequest.CertificateInfo-
単一の X.509 証明書を記述するオブジェクト。
webRequest.HttpHeaders-
HTTP ヘッダーの配列。それぞれのヘッダーは 2 つのプロパティを持つオブジェクトで表現されます:
nameと、valueかbinaryValueのいずれか。 webRequest.RequestFilter-
webRequest イベントに適用するフィルターを記述するオブジェクト。
webRequest.ResourceType-
ウェブリクエスト内で取得されるリソースの特定の種類を表す。
webRequest.SecurityInfo-
特定のウェブリクエストのセキュリティプロパティを記述するオブジェクト。
webRequest.StreamFilter-
HTTP レスポンスの受信中に、それをモニターしたり修正したりするのに使うオブジェクト。
webRequest.UploadData-
URL リクエスト内でアップロードされるデータを含む。
プロパティ
メソッド
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-
エラーが起きたときに発生します。
Example extensions
ブラウザーの互換性
メモ:
この API は、Chromium の chrome.webRequest API を参照しています。このドキュメントは、Chromium のソースコードにある web_request.json を基に作成されています。