Er is een nieuwe versie van de Reporting API beschikbaar. Deze is privacyvriendelijker en wordt waarschijnlijk door meer browsers ondersteund.
De rapportage-API informeert u over fouten die zich voordoen op uw website wanneer bezoekers deze gebruiken. Het biedt u inzicht in browserinterventies, browsercrashes, schendingen van het Content Security Policy (CSPB), COOP/COEP-schendingen, waarschuwingen voor verouderde functies en meer.
Er is een nieuwe versie van de Reporting API beschikbaar. De nieuwe API is compacter en wordt waarschijnlijk door meer browsers ondersteund.
Samenvatting
Websiteontwikkelaars
Als uw site al rapportagefunctionaliteit heeft : migreer dan naar versie 1 met behulp van de nieuwe header ( Reporting-Endpoints ), maar behoud de oude header ( Report-To ) nog enige tijd. Zie Migratie: voorbeeldcode .
Als je nu rapportagefunctionaliteit aan je site toevoegt : gebruik dan alleen de nieuwe header ( Reporting-Endpoints ).
⚠️ Zorg er in beide gevallen voor dat u de header Reporting-Endpoints instelt voor alle reacties die mogelijk rapporten genereren.
Rapportageserviceontwikkelaars
Als u een endpointservice onderhoudt of zelf een endpointservice beheert, kunt u meer verkeer verwachten naarmate u of externe ontwikkelaars migreren naar de Reporting API v1 ( Reporting-Endpoints -header).
Lees verder voor meer details en voorbeeldcode!
Netwerkfoutregistratie
Er wordt een nieuw mechanisme voor het loggen van netwerkfouten ontwikkeld. Zodra dat beschikbaar is, kunt u overschakelen van Reporting API v0 naar dat nieuwe mechanisme.
Demo en code
- Demosite: nieuwe rapportage-API (v1)
- Code voor de demosite
Verschillen tussen v0 en v1
Wat verandert er?
- De API-interface is anders.
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 gebruikt de Report-To header om benoemde eindpuntgroepen te configureren, en de report-to richtlijn in andere headers om naar deze eindpuntgroepen te verwijzen.
Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default" Document-Policy: ...; report-to main-endpoint
v1 gebruikt de Reporting-Endpoints header om benoemde eindpunten te configureren. Net als v0 gebruikt het de report-to richtlijn in andere headers om naar deze eindpuntgroepen te verwijzen.
- De reikwijdte van het rapport is anders.
Met v0 kunt u rapportage-eindpunten alleen voor bepaalde reacties instellen. Andere documenten (pagina's) op die oorsprong gebruiken dan automatisch deze omgevingseindpunten.
Met versie 1 moet u de header Reporting-Endpoints instellen voor alle reacties die mogelijk rapporten genereren.
- Beide API's ondersteunen dezelfde rapporttypen, met één uitzondering: versie 1 ondersteunt geen netwerkfoutrapporten . Lees meer in de migratiestappen .
- Versie 0 wordt niet en zal niet door alle browsers worden ondersteund. Versie 1 zal naar verwachting in de toekomst wel door meerdere browsers worden ondersteund.
Wat blijft onveranderd?
- De opmaak en structuur van de rapporten blijven ongewijzigd.
- Het verzoek dat de browser naar het eindpunt stuurt, blijft een
POSTverzoek metContent-typeapplication/reports+json. - Het toewijzen van bepaalde eindpunten aan bepaalde rapporttypen wordt zowel in versie 0 als in versie 1 ondersteund.
- De rol van het
defaulteindpunt blijft ongewijzigd. De Reporting API v1 heeft geen invloed op de
ReportingObserver.ReportingObserverbehoudt toegang tot alle observeerbare rapporten en het formaat ervan blijft identiek.
Alle verschillen tussen v0 en v1
Legacy Reporting API (v0)Report-To koptekst | Nieuwe rapportage-API (v1)Reporting-Endpoints koptekst | |
|---|---|---|
| Browserondersteuning | Chrome 69+ en Edge 69+. | Chrome 96+ en Edge 96+. Firefox ondersteunt het. Safari heeft er geen bezwaar tegen. Zie browsersignalen . |
| Eindpunten | Verstuurt rapporten naar een van de meerdere rapportverzamelaars (meerdere URL's gedefinieerd per eindpuntgroep). | Verstuurt rapporten naar specifieke rapportverzamelaars (er is slechts één URL per eindpunt gedefinieerd). |
| API-oppervlak | Gebruikt de `Report-To` header om benoemde eindpuntgroepen te configureren. | Gebruikt de `Reporting-Endpoints` header om benoemde eindpunten te configureren. |
| Soorten rapporten die via deze API kunnen worden gegenereerd |
| Onveranderd, behalve wat betreft netwerkfoutregistratie (NEL): dit wordt niet ondersteund in de nieuwe rapportage-API (v1) . |
| Rapportbereik | Oorsprong.Report-To header van een document is van invloed op andere documenten (pagina's) van die oorsprong. Het url veld van een rapport verschilt echter per document. | Document.Reporting-Endpoints -header van een document is alleen van invloed op dat document. Het url veld van een rapport verschilt nog steeds per document. |
| Rapportisolatie (batchverwerking) | Verschillende documenten (pagina's) of sites/bronnen die rond hetzelfde tijdstip een rapport genereren en die hetzelfde rapportage-eindpunt hebben, worden gebundeld: ze worden in hetzelfde bericht naar het rapportage-eindpunt verzonden. |
|
| Ondersteuning voor taakverdeling / prioriteiten | Ja | Nee |
Ontwikkelaars van eindpunten: verwacht meer verkeer.
Als u uw eigen server als rapportage-eindpunt hebt ingesteld, of als u een rapportverzamelaar als service ontwikkelt of onderhoudt, kunt u meer verkeer naar dat eindpunt verwachten.
Dit komt doordat rapporten met de Reporting API v1 niet in batches worden verwerkt zoals met de Reporting API v0. Daarom zal het aantal rapporten gelijk blijven wanneer applicatieontwikkelaars overstappen naar de Reporting API v1, maar het aantal verzoeken aan de endpointserver zal toenemen.
Applicatieontwikkelaars: Migreer naar Reporting-Endpoints (v1)
Wat moet je doen?
Het gebruik van de nieuwe Reporting API (v1) biedt diverse voordelen ✅:
- De signalen van de browsers zijn positief , wat betekent dat er voor v1 ondersteuning voor meerdere browsers verwacht kan worden (in tegenstelling tot v0, dat alleen in Chrome en Edge wordt ondersteund).
- De API is gestroomlijnder.
- Er wordt momenteel tooling ontwikkeld rondom de nieuwe Reporting API (v1).
Met dit in gedachten:
- Als uw site al gebruikmaakt van de Reporting API v0 met de
Report-Toheader, migreer dan naar de Reporting API v1 (zie de migratiestappen ). Als uw site al gebruikmaakt van rapportagefunctionaliteit voor schendingen van het Content Security Policy, raadpleeg dan de specifieke migratiestappen voor CSP-rapportage . - Als uw site de Reporting API nog niet gebruikt en u nu rapportagefunctionaliteit toevoegt: gebruik dan de nieuwe Reporting API (v1) (de
Reporting-Endpoints-header). Er is één uitzondering : als u netwerkfoutregistratie nodig hebt, gebruik danReport-To(v0). Netwerkfoutregistratie wordt momenteel niet ondersteund in Reporting API v1. Er wordt een nieuw mechanisme voor netwerkfoutregistratie ontwikkeld; tot die tijd gebruikt u Reporting API v0. Als u netwerkfoutregistratie nodig hebt in combinatie met andere rapporttypen, gebruik dan zowelReport-To(v0) alsReporting-Endpoints(v1). v0 biedt netwerkfoutregistratie en v1 biedt rapporten van alle andere typen.
Migratiestappen
Het doel van deze migratie is om de rapporten die u met v0 ontving, niet te verliezen .
Stap 1 (nu uitvoeren) : Gebruik beide headers:
Report-To(v0) enReporting-Endpoints(v1).Hiermee krijg je:
- Rapporten van nieuwere Chrome- en Edge-clients dankzij
Reporting-Endpoints(v1). - Rapporten van oudere Chrome- en Edge-clients dankzij
Report-To(v0).
Browserinstanties die
Reporting-Endpointsondersteunen, gebruikenReporting-Endpoints, en instanties die dat niet doen, vallen terug opReport-To. Het aanvraag- en rapportformaat is hetzelfde voor v0 en v1.- Rapporten van nieuwere Chrome- en Edge-clients dankzij
Stap 2 (nu uitvoeren): Zorg ervoor dat de header
Reporting-Endpointsis ingesteld op alle reacties die mogelijk rapporten genereren.Met versie 0 kon je ervoor kiezen om rapportage-eindpunten alleen voor bepaalde reacties in te stellen, en andere documenten (pagina's) van die oorsprong zouden dit 'omgevings'-eindpunt gebruiken. Met versie 1 moet je, vanwege het verschil in bereik, de header
Reporting-Endpointsinstellen voor alle reacties die mogelijk rapporten genereren.Stap 3 (start later): Zodra al uw gebruikers of de meeste gebruikers zijn overgestapt naar een recentere versie van Chrome of Edge (96 en later), verwijdert u
Report-To(v0) en behoudt u alleenReporting-Endpoints.Eén uitzondering: als u toch rapporten over netwerkfouten nodig hebt, behoud dan
Report-Tototdat er een nieuw mechanisme voor netwerkfoutenregistratie beschikbaar is.
Zie de codevoorbeelden in het migratiehandboek .
Migratiestappen voor CSP-rapportage
Er zijn twee manieren waarop rapporten over schendingen van het Content Security Policy kunnen worden geconfigureerd:
- Met alleen de CSP-header via de
report-uririchtlijn. Dit wordt breed ondersteund door browsers zoals Chrome, Firefox, Safari en Edge. Rapporten worden verzonden met het contenttypeapplication/csp-reporten hebben een formaat dat specifiek is voor CSP. Deze rapporten worden "CSP Level 2-rapporten" genoemd en zijn niet afhankelijk van de Reporting API. - Met de Reporting API kan dat via
Report-Toheader (legacy) of de nieuwereReporting-Endpoints(v1). Dit wordt alleen ondersteund in Chrome en Edge. Rapportverzoeken hebben dezelfde opmaak als andere Reporting API-verzoeken en hetzelfde content-typeapplication/reports+json.
Het gebruik van de eerste methode (alleen report-uri ) wordt niet langer aanbevolen en de tweede methode biedt een aantal voordelen. Met name kunt u hiermee op één manier rapportage instellen voor alle rapporttypen en een generiek eindpunt definiëren (omdat alle rapportaanvragen die via de Reporting API, CSP en andere API's worden gegenereerd, dezelfde indeling application/reports+json .
Slechts een paar browsers ondersteunen echter report-to . Daarom wordt aangeraden om report-uri te behouden naast de Reporting API-aanpak ( Report-To of beter nog, Reporting-Endpoints ) om CSP-schendingsrapporten van meerdere browsers te ontvangen. In een browser die report-uri als report-to herkent, wordt report-uri genegeerd als report-to aanwezig is. In een browser die alleen report-uri herkent, wordt alleen report-uri in overweging genomen.
Stap 1 (nu doen) : Als je het nog niet hebt toegevoegd, voeg dan
report-totoe naastreport-uri. Browsers die alleenreport-uriondersteunen (Firefox) gebruikenreport-uri, en browsers die ookreport-toondersteunen (Chrome, Edge) gebruikenreport-to. Om de benoemde eindpunten te specificeren die je inreport-towilt gebruiken, gebruik je zowel de headersReport-ToalsReporting-Endpoints. Dit zorgt ervoor dat je rapporten ontvangt van zowel oudere als nieuwere Chrome- en Edge-clients.Stap 3 (start later): Zodra al uw gebruikers of de meeste van uw gebruikers zijn overgestapt naar een recentere versie van Chrome of Edge (96 en later), verwijdert u
Report-To(v0) en behoudt u alleenReporting-Endpoints. Behoudreport-urizodat u nog steeds rapporten ontvangt voor browsers die deze ondersteunen.
Zie de codevoorbeelden voor deze stappen in de CSP-rapportagemigratie .
Migratie: voorbeeldcode
Overzicht
Als u de oude Reporting API (v0) gebruikt om overtredingsrapporten te verkrijgen voor een COOP ( Cross-Origin-Opener-Policy header), een COEP ( Cross-Origin-Embedder-Policy ) of een documentbeleid ( Document-Policy header): hoeft u deze beleidsheaders zelf niet te wijzigen wanneer u migreert naar Reporting API v1. Wat u wel moet doen, is migreren van de oude Report-To header naar de nieuwe Reporting-Endpoints header.
Als u de oude Reporting API (v0) gebruikt om rapporten over schendingen van een CSP ( Content-Security-Policy header) te verkrijgen, moet u mogelijk uw Content-Security-Policy aanpassen als onderdeel van uw migratie naar de nieuwe Reporting API (v1).
Basismigratie
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" }] }
Als uw site al rapportagefunctionaliteit heeft, kunt u Report-To tijdelijk behouden (totdat de meeste Chrome- en Edge-clients zijn bijgewerkt) om te voorkomen dat rapporten verloren gaan.
Als u netwerkfoutregistratie nodig hebt, behoud dan Report-To totdat een vervanging voor netwerkfoutregistratie beschikbaar is .
Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"Zo kan uw code er in de toekomst uitzien, zodra de meeste Chrome- en Edge-clients zijn bijgewerkt en API v1 ondersteunen.
Houd er rekening mee dat je met versie 1 nog steeds specifieke rapporttypen naar specifieke eindpunten kunt sturen. Je kunt echter slechts één URL per eindpunt hebben.
Alle pagina's bekijken
app.get("/", (request, response) => { response.set("Report-To", …) response.render(...) }); app.get("/page1", (request, response) => { response.render(...) });
Met v0 kunt u rapportage-eindpunten instellen voor slechts bepaalde reacties. Andere documenten (pagina's) op die oorsprong gebruiken automatisch deze omgevingseindpunten. Hier worden de eindpunten die zijn ingesteld voor "/" gebruikt voor alle reacties, bijvoorbeeld voor 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(...) });
Met versie 1 moet u de header Reporting-Endpoints instellen voor alle reacties die mogelijk rapporten genereren.
CSP-rapportagemigratie
Content-Security-Policy: ...; report-uri https://reports.example/main Het gebruik van alleen report-uri wordt niet langer aanbevolen . Als uw code er zoals hierboven uitziet, migreer dan. Zie de nieuwe codevoorbeelden hieronder (in groen).
Content-Security-Policy: ...; report-uri https://reports.example/main; report-to main-endpoint Report-To: main-endpoint="https://reports.example/main"
Dit is beter: deze code gebruikt `report-to`, de nieuwere vervanging voor `report-uri`. `report-uri` blijft behouden voor achterwaartse compatibiliteit; verschillende browsers ondersteunen report-to niet, maar wel report-uri .
Toch kan dit nog beter: deze code gebruikt de Reporting API v0 ( Report-To header). Migreer naar v1: zie de 'Nieuwe code'-voorbeelden hieronder (in groen).
Content-Security-Policy: ...; report-uri https://reports.example/main; report-to main-endpoint Reporting-Endpoints: main-endpoint="https://reports.example/main" Report-To: ...
Houd de report-uri -richtlijn naast de report-to -richtlijn totdat de report-to richtlijn door alle browsers wordt ondersteund. Zie de tabel met browsercompatibiliteit .
Laat Report-To tijdelijk naast Reporting-Endpoints staan. Zodra de meeste bezoekers van Chrome en Edge zijn overgestapt naar browserversie 96 of hoger, kunt u Report-To verwijderen.
Verder lezen
- Monitor uw webapplicatie met de Reporting API (hoofdartikel over de Reporting API)
- Specificatie: legacy Reporting API (v0)
- Specificatie: nieuwe rapportage-API (v1)
Met veel dank aan Ian Clelland, Eiji Kitamura en Milica Mihajlija voor hun beoordelingen en suggesties voor dit artikel.