Start · Sprachen · JavaScript · Referenz · Request.referrer

Request.referrer

Eigenschaft

Schreibgeschützte Eigenschaft, die den Referrer einer <code>Request</code> als String liefert: eine URL, <code>"about:client"</code> oder einen leeren String.

seit JavaScript Baseline: alle modernen Browser (Fetch API), Node. Kategorie: webapi

Signatur

get Request.prototype.referrer

Beschreibung

Die Eigenschaft referrer des Request-Interfaces gibt an, welcher Referrer für die Anfrage vorgesehen ist. Der Wert ist immer ein String und kann drei Formen haben:

  • "about:client": Der Standardwert. Der Browser setzt den Referrer selbst, abhängig vom aufrufenden Dokument bzw. Worker und von der gültigen referrerPolicy.
  • "" (leerer String): Es wird bewusst kein Referrer gesendet (entspricht „no-referrer“).
  • Eine absolute URL, z. B. "https://example.com/seite": Diese URL wurde ausdrücklich als Referrer festgelegt.

Den Wert legt man über die Option referrer im Request-Konstruktor oder in fetch() fest. Relative Angaben werden dabei gegen die Basis-URL des Dokuments aufgelöst. Nach dem Erzeugen kann die Eigenschaft nicht mehr geändert werden. Wer einen anderen Referrer braucht, erzeugt mit new Request(alterRequest, { referrer: … }) eine neue Anfrage.

Nützlich ist referrer vor allem in Service Workern: Dort lässt sich im fetch-Event über event.request.referrer ablesen, von welcher Seite eine Anfrage stammt, etwa für Protokollierung, Zugriffsregeln oder Cache-Strategien.

Wichtig: referrer zeigt den gewünschten Referrer. Welcher Referer-Header tatsächlich gesendet wird, hängt zusätzlich von Request.referrerPolicy ab. Die Policy kann die URL kürzen (z. B. auf den Origin) oder ganz entfernen.

Rückgabewert

Typ
string
Beschreibung
"about:client" (Standard), "" für keinen Referrer oder eine absolute Referrer-URL.

Beispiele

Standardwert und ausdrücklich gesetzte Referrer

// Angenommen, die Seite läuft unter https://example.com/shop/
const standard = new Request('/api/produkte');
console.log(standard.referrer);

const ohne = new Request('/api/produkte', { referrer: '' });
console.log(JSON.stringify(ohne.referrer));

const eigene = new Request('/api/produkte', { referrer: '/shop/warenkorb' });
console.log(eigene.referrer);
about:client "" https://example.com/shop/warenkorb

Referrer im Service Worker auswerten

// sw.js
self.addEventListener('fetch', (event) => {
  const { url, referrer } = event.request;

  // Bilder nur für Anfragen von der eigenen Seite ausliefern
  if (url.endsWith('.jpg') && referrer && !referrer.startsWith(self.location.origin)) {
    event.respondWith(new Response('Hotlinking nicht erlaubt', { status: 403 }));
    return;
  }

  console.log(`Anfrage ${url} von ${referrer || '(kein Referrer)'}`);
});
Anfrage https://example.com/app.js von https://example.com/start

Request mit geändertem Referrer kopieren

const original = new Request('/api/daten', { method: 'GET' });

// referrer ist schreibgeschützt, deshalb eine neue Request erzeugen
const anonym = new Request(original, { referrer: '', referrerPolicy: 'no-referrer' });

console.log(original.referrer, '→', JSON.stringify(anonym.referrer));
const res = await fetch(anonym);
console.log(res.status);
about:client → "" 200

// Wichtig · Fallstricke

  • Schreibgeschützt: request.referrer = '…' wird ignoriert und wirft im Strict Mode einen TypeError. Einen anderen Referrer setzt man nur beim Erzeugen der Request.
  • Nur gleicher Origin: Eine als Referrer übergebene URL muss denselben Origin wie das aufrufende Dokument haben. Bei einer URL mit fremdem Origin fällt der Browser auf "about:client" zurück. Eine ungültige URL löst einen TypeError aus. Den Referrer auf fremde Seiten zu fälschen, ist also nicht möglich.
  • Nicht gleich dem gesendeten Header: Welcher Referer-Header tatsächlich gesendet wird, bestimmt zusätzlich referrerPolicy. Die Standard-Policy der Browser, strict-origin-when-cross-origin, sendet an fremde Origins nur den Origin.
  • Sicherheit: Der Referrer wird vom Client geliefert und lässt sich außerhalb des Browsers beliebig setzen. Für Zugriffsschutz auf dem Server ist er deshalb nicht verlässlich.
  • In Node.js (undici-basiertes fetch) gibt es kein Dokument. Relative Referrer-URLs lassen sich dort nicht auflösen, und der Standardwert ist ebenfalls "about:client".