Signatur
Beschreibung
Request.targetAddressSpace gehört zur Spezifikation Local Network Access (früher „Private Network Access“). Damit wird eine Webseite, die aus dem öffentlichen Internet geladen wurde, daran gehindert, unbemerkt Geräte im lokalen Netz (Router, Drucker, IoT-Geräte) oder Dienste auf dem eigenen Rechner (localhost) anzusprechen. Die Eigenschaft zeigt, in welchen Adressraum eine Anfrage laut Absicht der Seite gehen soll.
Gesetzt wird der Wert über die gleichnamige Option targetAddressSpace im RequestInit-Objekt von new Request() oder fetch(). Mögliche Werte:
"loopback"– das Ziel ist der eigene Rechner (z. B.127.0.0.1,::1,localhost)."local"– das Ziel liegt im lokalen/privaten Netz (z. B.192.168.x.x,10.x.x.x,*.local)."public"– das Ziel ist eine öffentliche Adresse.
Die wichtigste Anwendung: Eine per HTTPS ausgelieferte Seite möchte ein lokales Gerät erreichen, das nur unverschlüsseltes HTTP spricht. Normalerweise wäre das als Mixed Content gesperrt. Mit dem passenden Wert für targetAddressSpace kündigt die Seite an, dass sie ein lokales Ziel meint. Der Browser kann den Nutzer dann um Erlaubnis bitten (Berechtigung „Lokales Netzwerk“) und die Anfrage zulassen. Stellt sich beim Verbindungsaufbau heraus, dass die Adresse gar nicht im angegebenen Adressraum liegt, bricht der Browser die Anfrage ab.
Die Eigenschaft ist nur lesbar. Nützlich ist sie vor allem in Service Workern, die abgefangene Anfragen untersuchen, weiterreichen oder protokollieren, und beim Debuggen.
Rückgabewert
"loopback", "local" oder "public". Wurde beim Erstellen nichts angegeben, liefert die Eigenschaft einen Standardwert, der vom Browser abhängt. In Browsern ohne Unterstützung ist sie undefined.Beispiele
Zieladressraum beim Erstellen setzen und auslesen
const req = new Request('http://192.168.1.1/status', {
targetAddressSpace: 'local'
});
if ('targetAddressSpace' in Request.prototype) {
console.log(req.targetAddressSpace);
} else {
console.log('Local Network Access wird nicht unterstützt');
}
HTTP-Gerät im lokalen Netz von einer HTTPS-Seite abfragen
const pingRouter = async () => {
try {
const res = await fetch('http://router.local/api/ping', {
targetAddressSpace: 'local' // erlaubt die Anfrage trotz Mixed Content, sofern der Nutzer zustimmt
});
const data = await res.json();
console.log('Router antwortet:', data);
} catch (err) {
// Nutzer hat abgelehnt, Adresse ist nicht lokal oder Gerät nicht erreichbar
console.error('Lokale Anfrage fehlgeschlagen:', err);
}
};
pingRouter();
Anfragen im Service Worker nach Adressraum protokollieren
// sw.js
self.addEventListener('fetch', (event) => {
const { url, targetAddressSpace } = event.request;
if (targetAddressSpace === 'loopback' || targetAddressSpace === 'local') {
console.log(`Anfrage an ein lokales Ziel (${targetAddressSpace}): ${url}`);
}
});
Wert beim Klonen der Anfrage übernehmen
const original = new Request('http://127.0.0.1:3000/health', {
targetAddressSpace: 'loopback'
});
const copy = new Request(original);
console.log(copy.targetAddressSpace);
// Wichtig · Fallstricke
- Experimentell und nur in Chromium: Die Eigenschaft gibt es derzeit nur in Chromium-basierten Browsern (Chrome, Edge) als Teil von Local Network Access. Firefox und Safari unterstützen sie nicht. Prüfe die Unterstützung vorher, z. B. mit
'targetAddressSpace' in Request.prototype. - Nur eine Absichtserklärung, keine Freigabe: Der Wert ersetzt weder die Zustimmung des Nutzers noch CORS. Das Zielgerät muss weiterhin passende CORS-Header senden. Liegt die aufgelöste IP-Adresse nicht im angegebenen Adressraum, schlägt die Anfrage mit einem
TypeErrorfehl. - Schreibgeschützt: Eine Zuweisung wie
request.targetAddressSpace = 'local'wird ignoriert. Um den Wert zu ändern, erstelle eine neue Anfrage:new Request(req, { targetAddressSpace: 'local' }). - Sicherheit: Local Network Access schützt vor CSRF-Angriffen auf Router und lokale Dienste. Frage lokale Geräte nur ab, wenn der Nutzer das erkennbar ausgelöst hat. Sonst lehnen Nutzer die Berechtigungsabfrage schnell ab.
- Die Spezifikation hat sich mehrfach geändert: Ältere Chrome-Versionen hatten den Wert
"private"und das Header-VerfahrenAccess-Control-Request-Private-Network. Verlass dich nicht auf diese alten Namen.