Bermigrasi ke Reporting API v1

Versi baru Reporting API telah tersedia. Versi ini lebih privat dan lebih mungkin didukung di berbagai browser.

Reporting API memberi tahu Anda tentang error yang terjadi di seluruh situs saat pengunjung menggunakannya. API ini memberi Anda visibilitas tentang intervensi browser, error browser, pelanggaran Kebijakan Keamanan Konten, pelanggaran COOP/COEP, peringatan penghentian penggunaan, dan lainnya.

Versi baru Reporting API telah tersedia. API baru ini lebih ramping dan lebih mungkin didukung di berbagai browser.

Ringkasan

Developer situs

Jika Anda sudah memiliki fungsi pelaporan untuk situs Anda: bermigrasi ke v1 dengan menggunakan header baru (Reporting-Endpoints), tetapi pertahankan header lama untuk sementara waktu (Report-To). Lihat Migrasi: contoh kode.

Jika Anda baru menambahkan fungsi pelaporan ke situs Anda: gunakan hanya header baru (Reporting-Endpoints).

⚠️ Dalam kedua kasus tersebut, pastikan untuk menetapkan header Reporting-Endpoints pada semua respons yang mungkin menghasilkan laporan.

Developer layanan pelaporan

Jika Anda mengelola layanan endpoint atau mengoperasikan layanan Anda sendiri, Anda akan melihat lebih banyak traffic saat Anda atau developer eksternal bermigrasi ke Reporting API v1 (header Reporting-Endpoints).

Teruslah membaca untuk mengetahui detail dan contoh kode.

Pencatatan Log Error Jaringan

Mekanisme baru untuk Pencatatan Log Error Jaringan akan dikembangkan. Setelah tersedia, beralihlah dari Reporting API v0 ke mekanisme baru tersebut.

Demo dan kode

Perbedaan antara v0 dan v1

Yang berubah

  • Platform API berbeda.
v0 (lama)
 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 menggunakan header Report-To untuk mengonfigurasi grup endpoint bernama, dan perintah report-to di header lain untuk mereferensikan grup endpoint ini.

v1 (baru)
 Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"
 Document-Policy: ...; report-to main-endpoint

v1 menggunakan header Reporting-Endpoints untuk mengonfigurasi endpoint bernama. Seperti v0, v1 menggunakan perintah report-to di header lain untuk mereferensikan grup endpoint ini.

  • Cakupan laporan berbeda.
v0 (lama)

Dengan v0, Anda hanya dapat menetapkan endpoint pelaporan pada beberapa respons. Dokumen (halaman) lain di origin tersebut akan otomatis menggunakan endpoint sekitar ini.

v1 (baru)

Dengan v1, Anda harus menetapkan header Reporting-Endpoints pada semua respons yang mungkin menghasilkan laporan.

  • Kedua API mendukung jenis laporan yang sama, dengan satu pengecualian: v1 tidak mendukung laporan Error Jaringan. Baca selengkapnya di langkah-langkah migrasi.
  • v0 tidak dan tidak akan didukung di berbagai browser. v1 lebih mungkin didukung di beberapa browser pada masa mendatang.

Yang tidak berubah

  • Format dan struktur laporan tidak berubah.
  • Permintaan yang dikirim oleh browser ke endpoint tetap berupa permintaan POST dari Content-type application/reports+json.
  • Pemetaan endpoint tertentu ke jenis laporan tertentu didukung di v0 dan v1.
  • Peran endpoint default tidak berubah.
  • Reporting API v1 tidak berdampak pada ReportingObserver. ReportingObserver terus mendapatkan akses ke semua laporan yang dapat diamati, dan formatnya identik.

Semua perbedaan antara v0 dan v1

Reporting API lama (v0)
Report-To header
Reporting API baru (v1)
Reporting-Endpoints header
Dukungan browser Chrome 69+ dan Edge 69+. Chrome 96+ dan Edge 96+. Firefox mendukung. Safari tidak keberatan. Lihat sinyal browser.
Endpoint Mengirim laporan ke beberapa pengumpul laporan (beberapa URL ditentukan per grup endpoint). Mengirim laporan ke pengumpul laporan tertentu (hanya satu URL yang ditentukan per endpoint).
Platform API Menggunakan header `Report-To` untuk mengonfigurasi grup endpoint bernama. Menggunakan header `Reporting-Endpoints` untuk mengonfigurasi endpoint bernama.
Jenis laporan yang dapat dibuat melalui API ini
  • Penghentian penggunaan
  • Intervensi
  • Error
  • COOP/COEP
  • Kebijakan Keamanan Konten Level 3 (CSP Level 3)
  • Pencatatan Log Error Jaringan (NEL)
Pelajari lebih lanjut jenis laporan di postingan Reporting API.
Tidak berubah, kecuali dari Pencatatan Log Error Jaringan (NEL): ini tidak didukung di Reporting API baru (v1).
Cakupan laporan Origin.
Header Report-To dokumen memengaruhi dokumen (halaman) lain dari origin tersebut. Kolom url laporan masih bervariasi per dokumen.
Dokumen.
Header Reporting-Endpoints dokumen hanya memengaruhi dokumen tersebut. Kolom url laporan masih bervariasi per dokumen.
Isolasi laporan (batching) Dokumen (halaman) atau situs/origin yang berbeda yang menghasilkan laporan pada waktu yang hampir bersamaan dan memiliki endpoint pelaporan yang sama akan dikelompokkan bersama: laporan tersebut akan dikirim dalam pesan yang sama ke endpoint pelaporan.
  • Laporan dari dokumen (halaman) yang berbeda tidak pernah dikirim bersama. Meskipun dua dokumen (halaman) dari origin yang sama menghasilkan laporan pada waktu yang sama, untuk endpoint yang sama, laporan tersebut tidak akan dikelompokkan. Ini adalah mekanisme untuk mengurangi serangan privasi.
  • Laporan dari dokumen (halaman) yang sama dapat dikirim bersama.
Dukungan untuk load balancing / prioritas Ya Tidak

Developer endpoint: Akan ada lebih banyak traffic

Jika Anda telah menyiapkan server Anda sendiri sebagai endpoint pelaporan, atau jika Anda mengembangkan atau mengelola pengumpul laporan sebagai layanan, Anda akan melihat lebih banyak traffic ke endpoint tersebut.

Hal ini karena laporan tidak dikelompokkan dengan Reporting API v1 seperti halnya dengan Reporting API v0. Oleh karena itu, saat developer aplikasi mulai bermigrasi ke Reporting API v1, jumlah laporan akan tetap sama, tetapi volume permintaan ke server endpoint akan meningkat.

Developer aplikasi: Bermigrasi ke Reporting-Endpoints (v1)

Apa yang perlu Anda lakukan?

Menggunakan Reporting API baru (v1) memiliki beberapa manfaat ✅:

  • Sinyal browser positif, yang berarti dukungan lintas-browser dapat diharapkan untuk v1 (tidak seperti v0 yang hanya didukung di Chrome dan Edge).
  • API ini lebih ramping.
  • Alat sedang dikembangkan di sekitar Reporting API baru (v1).

Dengan mempertimbangkan hal ini:

  • Jika situs Anda sudah menggunakan Reporting API v0 dengan header Report-To, bermigrasilah ke Reporting API v1 (lihat langkah-langkah migrasi). Jika situs Anda sudah menggunakan fungsi pelaporan untuk pelanggaran Kebijakan Keamanan Konten, periksa langkah-langkah migrasi khusus untuk pelaporan CSP.
  • Jika situs Anda belum menggunakan Reporting API dan Anda sekarang menambahkan fungsi pelaporan: gunakan Reporting API baru (v1) (header Reporting-Endpoints). Ada satu pengecualian untuk hal ini: jika Anda perlu menggunakan Pencatatan Log Error Jaringan, gunakan Report-To (v0). Pencatatan Log Error Jaringan saat ini tidak didukung di Reporting API v1. Mekanisme baru untuk Pencatatan Log Error Jaringan akan dikembangkan⏤hingga tersedia, gunakan Reporting API v0. Jika Anda memerlukan Pencatatan Log Error Jaringan bersama jenis laporan lainnya, gunakan Report-To (v0) dan Reporting-Endpoints (v1). v0 memberi Anda Pencatatan Log Error Jaringan dan v1 memberi Anda laporan dari semua jenis lainnya.

Langkah migrasi

Tujuan Anda dalam migrasi ini adalah tidak kehilangan laporan yang biasanya Anda dapatkan dengan v0.

  1. Langkah 1 (lakukan sekarang): Gunakan kedua header: Report-To (v0) dan Reporting-Endpoints (v1).

    Dengan ini, Anda akan mendapatkan:

    • Laporan dari klien Chrome dan Edge yang lebih baru berkat Reporting-Endpoints (v1).
    • Laporan dari klien Chrome dan Edge yang lebih lama berkat Report-To (v0).

    Instance browser yang mendukung Reporting-Endpoints akan menggunakan Reporting-Endpoints, dan instance yang tidak mendukung akan menggunakan Report-To sebagai pengganti. Format permintaan dan laporan sama untuk v0 dan v1.

  2. Langkah 2 (lakukan sekarang): Pastikan header Reporting-Endpoints ditetapkan pada semua respons yang mungkin menghasilkan laporan.

    Dengan v0, Anda dapat memilih untuk menetapkan endpoint pelaporan hanya pada beberapa respons, dan dokumen (halaman) lain di origin tersebut akan menggunakan endpoint "sekitar" ini. Dengan v1, karena perbedaan dalam cakupan, Anda harus menetapkan header Reporting-Endpoints pada semua respons yang mungkin menghasilkan laporan.

  3. Langkah 3 (mulai nanti): Setelah semua atau sebagian besar pengguna Anda mengupdate ke Chrome atau Edge versi yang lebih baru (96 dan yang lebih baru), hapus Report-To (v0) dan pertahankan hanya Reporting-Endpoints.

    Satu pengecualian: jika Anda memerlukan laporan Pencatatan Log Error Jaringan, pertahankan Report-To hingga mekanisme baru tersedia untuk Pencatatan Log Error Jaringan.

Lihat contoh kode di panduan migrasi.

Langkah migrasi untuk pelaporan CSP

Ada dua cara Kebijakan Keamanan Konten laporan pelanggaran dapat dikonfigurasi:

  • Dengan header CSP saja melalui perintah report-uri. Hal ini memiliki dukungan browser yang luas, di seluruh Chrome, Firefox, Safari, dan Edge. Laporan dikirim dengan jenis konten application/csp-report dan memiliki format yang khusus untuk CSP. Laporan ini disebut "Laporan CSP Level 2" dan tidak bergantung pada Reporting API.
  • Dengan Reporting API, yaitu melalui header Report-To (lama) atau Reporting-Endpoints (v1) yang lebih baru. Hal ini hanya didukung di Chrome dan Edge. Permintaan laporan memiliki format yang sama dengan permintaan Reporting API lainnya, dan jenis konten yang sama application/reports+json.

Menggunakan pendekatan pertama (hanya report-uri) tidak lagi direkomendasikan dan menggunakan pendekatan kedua memiliki beberapa manfaat. Secara khusus, hal ini memungkinkan Anda menggunakan satu cara untuk menyiapkan pelaporan untuk semua jenis laporan serta menetapkan endpoint generik (karena semua permintaan laporan yang dibuat melalui Reporting API⏤CSP dan lainnya⏤memiliki format yang sama application/reports+json.

Namun, hanya beberapa browser yang mendukung report-to. Oleh karena itu, sebaiknya pertahankan report-uri bersama pendekatan Reporting API (Report-To atau yang lebih baik, Reporting-Endpoints) untuk mendapatkan laporan pelanggaran CSP dari beberapa browser. Di browser yang mengenali report-uri dan report-to, report-uri akan diabaikan jika report-to ada. Di browser yang hanya mengenali report-uri, hanya report-uri yang akan dipertimbangkan.

  1. Langkah 1 (lakukan sekarang): Jika Anda belum menambahkannya, tambahkan report-to bersama report-uri. Browser yang hanya mendukung report-uri (Firefox) akan menggunakan report-uri, dan browser yang juga mendukung report-to(Chrome, Edge) akan menggunakan report-to. Untuk menentukan endpoint bernama yang akan Anda gunakan di report-to, gunakan kedua header Report-To dan Reporting-Endpoints. Hal ini memastikan Anda mendapatkan laporan dari klien Chrome dan Edge yang lebih lama dan lebih baru.

  2. Langkah 3 (mulai nanti): Setelah semua atau sebagian besar pengguna Anda mengupdate ke Chrome atau Edge versi yang lebih baru (96 dan yang lebih baru), hapus Report-To (v0) dan pertahankan hanya Reporting-Endpoints. Pertahankan report-uri agar Anda tetap mendapatkan laporan untuk browser yang hanya mendukungnya.

Lihat contoh kode untuk langkah-langkah ini di migrasi pelaporan CSP.

Migrasi: contoh kode

Ringkasan

Jika Anda menggunakan Reporting API lama (v0) untuk mendapatkan laporan pelanggaran untuk COOP (header Cross-Origin-Opener-Policy), COEP (Cross-Origin-Embedder-Policy), atau kebijakan dokumen (header Document-Policy): Anda tidak perlu mengubah header kebijakan ini sendiri saat bermigrasi ke Reporting API v1. Yang perlu Anda lakukan adalah bermigrasi dari header Report-To lama ke header Reporting-Endpoints baru.

Jika Anda menggunakan Reporting API lama (v0) untuk mendapatkan laporan pelanggaran untuk CSP (header Content-Security-Policy), Anda mungkin perlu mengubah Content-Security-Policy sebagai bagian dari migrasi ke Reporting API baru (v1).

Migrasi dasar

Kode lama (dengan v0)
Report-To: { group: "main-endpoint", "endpoints": [ { "url": "https://reports.example/main" }] }, { group: "default-endpoint", "endpoints": [ { "url": "https://reports.example/default" }] }
Kode baru (kode transisi dengan v0 bersama v1)
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" }] }

Jika Anda sudah memiliki fungsi pelaporan di situs Anda, pertahankan Report-To hanya untuk sementara (hingga sebagian besar klien Chrome dan Edge telah diupdate) agar tidak kehilangan laporan.

Jika Anda memerlukan Pencatatan Log Error Jaringan, pertahankan Report-To hingga penggantian Pencatatan Log Error Jaringan tersedia.

Kode baru (hanya dengan v1)
Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"

Inilah tampilan kode Anda di masa mendatang, setelah sebagian besar klien Chrome dan Edge telah diupdate dan mendukung API v1.

Perhatikan bahwa dengan v1, Anda masih dapat mengirim jenis laporan tertentu ke endpoint tertentu. Namun, Anda hanya dapat memiliki satu URL per endpoint.

Mengamati semua halaman

Kode lama (dengan v0), misalnya dengan Express
app.get("/", (request, response) => {
  response.set("Report-To", )
  response.render(...)
});
app.get("/page1", (request, response) => {
  response.render(...)
});

Dengan v0, Anda hanya dapat menetapkan endpoint pelaporan pada beberapa respons. Dokumen (halaman) lain di origin tersebut otomatis menggunakan endpoint sekitar ini. Di sini, endpoint yang ditetapkan untuk "/" digunakan untuk semua respons, misalnya untuk page1.

Kode baru (dengan v1), misalnya dengan Express
// 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(...)
});

Dengan v1, Anda harus menetapkan header Reporting-Endpoints pada semua respons yang mungkin menghasilkan laporan.

Migrasi pelaporan CSP

Kode lama, hanya dengan report-uri
Content-Security-Policy: ...; report-uri https://reports.example/main

Menggunakan report-uri saja tidak lagi direkomendasikan. Jika kode Anda terlihat seperti di atas, lakukan migrasi. Lihat Contoh kode baru di bawah (dengan warna hijau).

Kode lama yang lebih baik, dengan report-uri dan perintah report-to dengan header Report-To (v0)
Content-Security-Policy: ...; report-uri https://reports.example/main; report-to main-endpoint
Report-To: main-endpoint="https://reports.example/main"

Ini lebih baik: kode ini menggunakan report-to, pengganti report-uri yang lebih baru. Kode ini masih mempertahankan report-uri untuk kompatibilitas mundur; beberapa browser tidak mendukung report-to tetapi mendukung report-uri.

Namun, hal ini dapat ditingkatkan: kode ini menggunakan Reporting API v0 (header Report-To). Bermigrasi ke v1: lihat contoh 'Kode baru' di bawah (dengan warna hijau).

Kode baru, dengan report-uri dan perintah report-to dengan header Reporting-Endpoints (v1)
Content-Security-Policy: ...; report-uri https://reports.example/main; report-to main-endpoint
Reporting-Endpoints: main-endpoint="https://reports.example/main"
Report-To: ...

Pertahankan perintah report-uri bersama perintah report-to hingga perintah report-to didukung di berbagai browser. Lihat tabel kompatibilitas browser.

Pertahankan Report-To bersama Reporting-Endpoints untuk sementara. Setelah sebagian besar pengunjung Chrome dan Edge Anda mengupgrade ke versi browser 96+, hapus Report-To.

Bacaan lebih lanjut

Terima kasih banyak kepada Ian Clelland, Eiji Kitamura, dan Milica Mihajlija atas ulasan dan saran mereka tentang artikel ini.