Signatur
Beschreibung
Die Eigenschaft referrerPolicy eines Request-Objekts gibt als Zeichenkette zurück, nach welcher Regel der Browser den Referer-Header für diese Anfrage bildet. Mögliche Werte sind z. B. "no-referrer", "origin", "same-origin" oder "strict-origin-when-cross-origin". So lässt sich steuern, ob Ziel-Server die vollständige URL der aufrufenden Seite erfahren, nur deren Ursprung oder gar nichts.
Gesetzt wird der Wert über die Option referrerPolicy im Konstruktor new Request(url, init) oder direkt bei fetch(url, init). Wird keine Policy angegeben, ist der Wert eine leere Zeichenkette "". In diesem Fall greift die Policy des Dokuments, etwa aus dem HTTP-Header Referrer-Policy oder aus <meta name="referrer">. Gibt es dort auch keine Vorgabe, verwendet der Browser seinen Standardwert, heute meist strict-origin-when-cross-origin.
Typische Einsatzfälle: Anfragen an Drittanbieter-APIs, bei denen keine internen URLs mit Token oder Pfaden nach außen gelangen sollen. Außerdem Service Worker, die eingehende Anfragen untersuchen oder mit geänderter Policy weiterreichen.
"": keine eigene Policy, es gilt die Vorgabe des Dokuments bzw. des Browsersno-referrer: der Header wird nie gesendetno-referrer-when-downgrade: volle URL, außer beim Wechsel von HTTPS zu HTTPorigin: immer nur der Ursprung (Schema, Host, Port)origin-when-cross-origin: volle URL bei gleichem Ursprung, sonst nur der Ursprungsame-origin: volle URL nur bei gleichem Ursprung, sonst kein Headerstrict-origin: nur der Ursprung, beim Wechsel zu HTTP gar nichtsstrict-origin-when-cross-origin: volle URL bei gleichem Ursprung, sonst nur der Ursprung, beim Wechsel zu HTTP gar nichtsunsafe-url: immer die volle URL, auch über HTTP (nicht empfohlen)
Rückgabewert
"", "no-referrer", "no-referrer-when-downgrade", "same-origin", "origin", "strict-origin", "origin-when-cross-origin", "strict-origin-when-cross-origin" oder "unsafe-url".Beispiele
Policy beim Erzeugen eines Request setzen und auslesen
const req = new Request('https://api.example.com/daten', {
referrerPolicy: 'no-referrer'
});
console.log(req.referrerPolicy);
// Ohne Angabe bleibt der Wert leer
const standard = new Request('https://api.example.com/daten');
console.log(JSON.stringify(standard.referrerPolicy));
Datensparsamer Aufruf einer Drittanbieter-API
const ladeWetter = async (stadt) => {
const req = new Request(
`https://wetter.example.org/api?stadt=${encodeURIComponent(stadt)}`,
{ referrerPolicy: 'strict-origin' }
);
console.log('Policy:', req.referrerPolicy);
const res = await fetch(req);
return res.json();
};
ladeWetter('Berlin').then(console.log).catch(console.error);
Service Worker: Anfragen an fremde Ursprünge ohne Referrer weiterleiten
// sw.js
self.addEventListener('fetch', (event) => {
const req = event.request;
const fremd = new URL(req.url).origin !== self.location.origin;
if (fremd && req.referrerPolicy !== 'no-referrer') {
// Request ist unveränderlich, also eine Kopie mit neuer Policy anlegen
const sicher = new Request(req, { referrerPolicy: 'no-referrer' });
event.respondWith(fetch(sicher));
}
});
Ungültiger Wert löst einen TypeError aus
try {
new Request('/api', { referrerPolicy: 'keine' });
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
Schreibgeschützt: Eine Zuweisung wie req.referrerPolicy = 'origin' wird ignoriert, im Strict Mode gibt es einen TypeError. Um die Policy zu ändern, legt man mit new Request(alterRequest, { referrerPolicy: '...' }) eine Kopie an.
Leerer String bedeutet nicht „kein Referrer“: "" heißt nur, dass die Anfrage keine eigene Policy hat. Der tatsächlich gesendete Header hängt dann von der Dokument-Policy und dem Browser-Standard ab.
Ungültige Werte im Konstruktor oder bei fetch() führen zu einem TypeError.
Datenschutz: unsafe-url kann vollständige URLs samt Query-Parametern (etwa Session-Token) an fremde Server und über unverschlüsseltes HTTP weitergeben. Deshalb besser vermeiden. Außerdem können Browser die Policy verschärfen, aber nicht lockern: Firefox und Chrome kürzen zum Beispiel ursprungsübergreifende Referrer auch bei weicheren Einstellungen.
Kompatibilität: In allen aktuellen Browsern und in Node.js ab Version 18 (natives fetch) verfügbar. In Node.js wird aber kein Referrer aus einem Dokument abgeleitet.