Reporting API の新しいバージョンをご利用いただけるようになりました。プライバシーが保護され、ブラウザ間でサポートされる可能性が高くなります。
Reporting API は、サイトの訪問者がサイトを使用しているときに発生したエラーを通知します。ブラウザの介入、ブラウザのクラッシュ、コンテンツ セキュリティ ポリシーの違反、COOP/COEP の違反、非推奨の警告などを可視化できます。
Reporting API の新しいバージョンをご利用いただけます。新しい API はより簡潔で、ブラウザ全体でサポートされる可能性が高くなります。
概要
サイト デベロッパー
サイトにすでにレポート機能がある場合: 新しいヘッダー(Reporting-Endpoints)を使用して v1 に移行しますが、しばらくの間は以前のヘッダー(Report-To)を残しておきます。移行: コード例をご覧ください。
サイトにレポート機能を追加したばかりの場合: 新しいヘッダー(Reporting-Endpoints)のみを使用します。
⚠️ どちらの場合も、レポートを生成する可能性のあるすべてのレスポンスに Reporting-Endpoints ヘッダーを設定してください。
レポート サービスのデベロッパー
エンドポイント サービスを維持している場合や、独自のエンドポイント サービスを運用している場合は、ユーザーや外部デベロッパーが Reporting API v1(Reporting-Endpoints ヘッダー)に移行するにつれて、トラフィックが増加することが予想されます。
詳細とコード例については、以下をご覧ください。
ネットワーク エラー ロギング
ネットワーク エラー ロギングの新しいメカニズムが開発されます。このメカニズムが利用可能になったら、Reporting API v0 から新しいメカニズムに切り替えてください。
デモとコード
- デモサイト: 新しいレポート API(v1)
- デモサイトのコード
v0 と v1 の違い
変更点
- API サーフェスが異なります。
Report-To: { group: "main-endpoint", "max_age": 86400, "endpoints": [ { "url": ... }, { "url": ... }] }, { group: "default-endpoint", "max_age": 86400, "endpoints": [ { "url": ... }, { "url": ... }] } Document-Policy: ...; report-to main-endpoint
{0 は、Report-To ヘッダーを使用して名前付きエンドポイント グループを構成し、他のヘッダーの report-to ディレクティブを使用してこれらのエンドポイント グループを参照します。
Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default" Document-Policy: ...; report-to main-endpoint
v1 は、Reporting-Endpoints ヘッダーを使用して名前付きエンドポイントを構成します。v0 と同様に、他のヘッダーの report-to ディレクティブを使用して、これらのエンドポイント グループを参照します。
- レポートの範囲が異なる。
v0 では、一部のレスポンスでのみレポート エンドポイントを設定できます。そのオリジンの他のドキュメント(ページ)は、これらのアンビエント エンドポイントを自動的に使用します。
v1 では、レポートを生成する可能性のあるすべてのレスポンスで Reporting-Endpoints ヘッダーを設定する必要があります。
- どちらの API も同じレポートタイプをサポートしていますが、1 つだけ例外があります。v1 はネットワーク エラー レポートをサポートしていません。詳しくは、移行手順をご覧ください。
- v0 はブラウザ間でサポートされておらず、今後もサポートされる予定はありません。v1 は、今後複数のブラウザでサポートされる可能性が高くなります。
変更されない点
- レポートの形式と構造は変更されません。
- ブラウザからエンドポイントに送信されるリクエストは、
Content-typeapplication/reports+jsonのPOSTリクエストのままです。 - 特定のレポートタイプに特定のエンドポイントをマッピングすることは、v0 と v1 の両方でサポートされています。
defaultエンドポイントのロールは変更されません。Reporting API v1 は
ReportingObserverに影響しません。ReportingObserverは、引き続きすべての観測可能なレポートにアクセスでき、その形式は同一です。
v0 と v1 のすべての違い
以前の Reporting API(v0)Report-To ヘッダー |
新しい Reporting API(v1)Reporting-Endpoints ヘッダー |
|
|---|---|---|
| ブラウザ サポート | Chrome 69 以降、Edge 69 以降。 | Chrome 96 以降、Edge 96 以降。Firefox はサポートされています。Safari はオブジェクトを拒否しません。ブラウザ シグナルをご覧ください。 |
| エンドポイント | 複数のレポート コレクタ(エンドポイント グループごとに複数の URL が定義されている)にレポートを送信します。 | 特定のレポート コレクタにレポートを送信します(エンドポイントごとに 1 つの URL のみ定義)。 |
| API サーフェス | `Report-To` ヘッダーを使用して、名前付きのエンドポイント グループを構成します。 |
`Reporting-Endpoints` ヘッダーを使用して、名前付きのエンドポイントを構成します。 |
| この API で生成できるレポートの種類 |
|
ネットワーク エラー ロギング(NEL): 新しい Reporting API(v1)では対象外ですを除き、変更はありません。 |
| レポートの範囲 | 生成元に帰属するものとして扱うことを可能にする技術です。 ドキュメントの Report-To ヘッダーは、そのオリジンからの他のドキュメント(ページ)に影響します。レポートの url フィールドは、ドキュメントごとに異なります。 |
Document. ドキュメントの Reporting-Endpoints ヘッダーは、そのドキュメントにのみ影響します。レポートの url フィールドは、ドキュメントごとに異なります。 |
| レポートの分離(バッチ処理) | 同じレポート エンドポイントを持ち、ほぼ同時にレポートを生成する異なるドキュメント(ページ)またはサイト/オリジンは、バッチ処理されます。つまり、同じメッセージでレポート エンドポイントに送信されます。 |
|
| ロード バランシング / 優先度のサポート | はい | × |
エンドポイント デベロッパー: トラフィックの増加が予想されます
独自のサーバーをレポート エンドポイントとして設定している場合や、レポート コレクタをサービスとして開発または保守している場合は、そのエンドポイントへのトラフィックが増加します。
これは、Reporting API v1 では Reporting API v0 のようにレポートがバッチ処理されないためです。そのため、アプリケーション デベロッパーが Reporting API v1 への移行を開始すると、レポートの数はほぼ同じになりますが、エンドポイント サーバーへのリクエストの量は増加します。
アプリケーション デベロッパー: Reporting-Endpoints(v1)に移行する
どうすればよいですか。
新しい Reporting API(v1)を使用すると、次のようなメリットがあります ✅。
- ブラウザ シグナルはポジティブです。つまり、v1 では(Chrome と Edge でのみサポートされている v0 とは異なり)クロスブラウザ サポートが期待できます。
- API がより簡潔になります。
- 新しい Reporting API(v1)を中心にツールが開発されています。
これを踏まえると以下のようになります。
- サイトですでに
Report-Toヘッダーで Reporting API v0 を使用している場合は、Reporting API v1 に移行します(移行手順を参照)。サイトでコンテンツ セキュリティ ポリシー違反のレポート機能がすでに使用されている場合は、CSP レポートの移行手順をご確認ください。 - サイトで Reporting API をまだ使用しておらず、レポート機能を追加する場合は、新しい Reporting API(v1)(
Reporting-Endpointsヘッダー)を使用します。ただし、例外が 1 つあります。ネットワーク エラー ロギングを使用する必要がある場合は、Report-To(v0)を使用します。現在、Reporting API v1 ではネットワーク エラー ロギングはサポートされていません。ネットワーク エラー ロギングの新しいメカニズムが開発されます。それまでは、Reporting API v0 を使用してください。他のレポートタイプと並行してネットワーク エラー ロギングが必要な場合は、Report-To(v0)とReporting-Endpoints(v1)の両方を使用します。v0 ではネットワーク エラー ロギングが、v1 では他のすべてのタイプのレポートが提供されます。
移行手順
この移行の目標は、v0 で取得していたレポートを失わないことです。
ステップ 1(今すぐ行う):
Report-To(v0)とReporting-Endpoints(v1)の両方のヘッダーを使用します。これにより、次のことが可能になります。
Reporting-Endpoints(v1)により、新しい Chrome クライアントと Edge クライアントからのレポート。Report-To(v0)により、古い Chrome クライアントと Edge クライアントからのレポート。
Reporting-Endpointsをサポートするブラウザ インスタンスはReporting-Endpointsを使用し、サポートしないインスタンスはReport-Toにフォールバックします。リクエストとレポートの形式は v0 と v1 で同じです。ステップ 2(今すぐ行う): レポートを生成する可能性のあるすべてのレスポンスで
Reporting-Endpointsヘッダーが設定されていることを確認します。v0 では、一部のレスポンスでのみレポート エンドポイントを設定し、そのオリジンの他のドキュメント(ページ)ではこの「アンビエント」エンドポイントを使用するように選択できました。v1 では、スコープ設定の違いにより、レポートを生成する可能性のあるすべてのレスポンスに
Reporting-Endpointsヘッダーを設定する必要があります。ステップ 3(後で開始): ユーザーのすべてまたはほとんどが新しい Chrome または Edge のインストール(96 以降)に更新されたら、
Report-To(v0)を削除してReporting-Endpointsのみを保持します。ただし、ネットワーク エラー ロギング レポートが必要な場合は、ネットワーク エラー ロギングの新しいメカニズムが導入されるまで
Report-Toを保持してください。
移行クックブックのコード例をご覧ください。
CSP レポートの移行手順
Content-Security-Policy 違反レポートを構成する方法は 2 つあります。
report-uriディレクティブを介して CSP ヘッダーのみを使用します。これは、Chrome、Firefox、Safari、Edge など、幅広いブラウザでサポートされています。レポートは content-typeapplication/csp-reportで送信され、CSP 固有の形式になっています。これらのレポートは「CSP レベル 2 レポート」と呼ばれ、Reporting API に依存しません。- Reporting API では、
Report-Toヘッダー(以前のバージョン)または新しいReporting-Endpoints(v1)を使用します。この機能は Chrome と Edge でのみサポートされています。レポート リクエストの形式は他の Reporting API リクエストと同じで、コンテンツ タイプapplication/reports+jsonも同じです。
最初のアプローチ(report-uri のみ)を使用することは推奨されなくなりました。2 番目のアプローチを使用することには、いくつかのメリットがあります。特に、すべてのレポートタイプのレポート設定を単一の方法で行えるようにし、汎用エンドポイントを設定できるようにします(Reporting API 経由で生成されるすべてのレポート リクエスト(CSP など)は同じ形式 application/reports+json を持ちます)。
ただし、report-to をサポートしているブラウザはごく一部です。そのため、複数のブラウザから CSP 違反レポートを取得するには、Reporting API アプローチ(Report-To 以上、Reporting-Endpoints)とともに report-uri を維持することをおすすめします。report-uri と report-to を認識するブラウザでは、report-to が存在する場合、report-uri は無視されます。report-uri のみを認識するブラウザでは、report-uri のみが考慮されます。
ステップ 1(今すぐ行う): まだ追加していない場合は、
report-uriとともにreport-toを追加します。report-uri(Firefox)のみをサポートするブラウザはreport-uriを使用し、report-to(Chrome、Edge)もサポートするブラウザはreport-toを使用します。report-toで使用する名前付きエンドポイントを指定するには、Report-ToヘッダーとReporting-Endpointsヘッダーの両方を使用します。これにより、古い Chrome クライアントと新しい Chrome クライアントの両方からレポートを取得できます。ステップ 3(後で開始): ユーザーのすべてまたはほとんどが新しい Chrome または Edge のインストール(96 以降)に更新されたら、
Report-To(v0)を削除してReporting-Endpointsのみを保持します。report-uriを保持すると、この形式のみをサポートするブラウザのレポートも引き続き取得できます。
これらの手順のコード例については、CSP レポートの移行をご覧ください。
移行: コード例
概要
以前の Reporting API(v0)を使用して COOP(Cross-Origin-Opener-Policy ヘッダー)、COEP(Cross-Origin-Embedder-Policy)、またはドキュメント ポリシー(Document-Policy ヘッダー)の違反レポートを取得している場合: Reporting API v1 に移行する際に、これらのポリシー ヘッダー自体を変更する必要はありません。必要なのは、以前の Report-To ヘッダーから新しい Reporting-Endpoints ヘッダーへの移行です。
以前の Reporting API(v0)を使用して CSP(Content-Security-Policy ヘッダー)の違反レポートを取得している場合は、新しい Reporting API(v1)への移行の一環として Content-Security-Policy を調整する必要がある場合があります。
基本移行
Report-To: { group: "main-endpoint", "endpoints": [ { "url": "https://reports.example/main" }] }, { group: "default-endpoint", "endpoints": [ { "url": "https://reports.example/default" }] }Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default" Report-To: { group: "main-endpoint", "max_age": 86400, "endpoints": [ { "url": "https://reports.example/main" }] }, { group: "default-endpoint", "max_age": 86400, "endpoints": [ { "url": "https://reports.example/default" }] }
サイトにすでにレポート機能がある場合は、レポートが失われないように、Report-To を一時的にのみ(ほとんどの Chrome クライアントと Edge クライアントが更新されるまで)保持してください。
ネットワーク エラー ロギングが必要な場合は、Report-To をネットワーク エラー ロギングの代替機能が利用可能になるまで保持してください。
Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"これは、ほとんどの Chrome クライアントと Edge クライアントが更新され、API v1 をサポートするようになった後のコードの例です。
v1 では、特定のレポートタイプを特定のエンドポイントに送信できます。ただし、エンドポイントごとに設定できる URL は 1 つだけです。
すべてのページを監視する
app.get("/", (request, response) => { response.set("Report-To", …) response.render(...) }); app.get("/page1", (request, response) => { response.render(...) });
v0 では、一部のレスポンスでのみレポート エンドポイントを設定できます。そのオリジンの他のドキュメント(ページ)は、これらのアンビエント エンドポイントを自動的に使用します。ここでは、"/" に設定されたエンドポイントが、page1 などのすべてのレスポンスに使用されます。
// Use a middleware to set the reporting endpoint(s) for *all* requests. app.use(function(request, response, next) { response.set("Reporting-Endpoints", …); next(); }); app.get("/", (request, response) => { response.render(...) }); app.get("/page1", (request, response) => { response.render(...) });
v1 では、レポートを生成する可能性のあるすべてのレスポンスに Reporting-Endpoints ヘッダーを設定する必要があります。
CSP レポートの移行
Content-Security-Policy: ...; report-uri https://reports.example/mainreport-uri のみを使用することは推奨されなくなりました。コードが上記のようになっている場合は、移行します。以下の新しいコードの例(緑色)をご覧ください。
Content-Security-Policy: ...; report-uri https://reports.example/main; report-to main-endpoint Report-To: main-endpoint="https://reports.example/main"
こちらのコードの方が優れています。このコードでは、report-uri の新しい代替である report-to を使用しています。下位互換性のために report-uri は残されています。いくつかのブラウザは report-to をサポートしていませんが、report-uri はサポートしています。
ただし、このコードは Reporting API v0(Report-To ヘッダー)を使用しているため、改善の余地があります。v1 に移行する: 以下の「新しいコード」の例(緑色)をご覧ください。
Content-Security-Policy: ...; report-uri https://reports.example/main; report-to main-endpoint Reporting-Endpoints: main-endpoint="https://reports.example/main" Report-To: ...
report-to ディレクティブがブラウザ全体でサポートされるまで、report-to ディレクティブとともに report-uri ディレクティブを保持します。ブラウザの互換性に関する表をご覧ください。
Report-To を Reporting-Endpoints と一時的に並行して使用します。Chrome と Edge の訪問者のほとんどが 96 以上のブラウザ バージョンにアップグレードしたら、Report-To を削除します。
関連情報
- Reporting API でウェブ アプリケーションをモニタリングする(Reporting API に関するメイン投稿)
- 仕様: 以前の Reporting API(v0)
- 仕様: 新しい Reporting API(v1)
この記事のレビューと提案をしてくれた Ian Clelland、Eiji Kitamura、Milica Mihajlija に感謝します。