Signatur
Beschreibung
Die Eigenschaft protocol des Location-Interfaces enthält das Schema der aktuellen Dokument-URL als String, einschließlich des abschließenden Doppelpunkts. Typische Werte sind "https:", "http:", "file:", "data:", "blob:" oder bei Browser-Erweiterungen "chrome-extension:" bzw. "moz-extension:". Der Wert wird immer kleingeschrieben zurückgegeben.
In der Praxis braucht man location.protocol vor allem, um zu erkennen, ob eine Seite verschlüsselt ausgeliefert wird (z. B. für eine clientseitige Weiterleitung auf HTTPS), ob sie lokal über file: geöffnet wurde (wo viele APIs wie fetch() auf relative Pfade oder Service Worker nicht funktionieren) oder um passende URLs für WebSockets (ws:/wss:) aufzubauen.
Die Eigenschaft ist auch beschreibbar: Eine Zuweisung wie location.protocol = "https:" ändert das Schema und löst eine Navigation zur neuen URL aus. Der Doppelpunkt darf dabei weggelassen werden. Ist das neue Schema ungültig oder mit der aktuellen URL nicht kombinierbar (etwa ein Wechsel zwischen „speziellen“ Schemata wie http und nicht-speziellen wie data), wird die Zuweisung ignoriert bzw. es wird ein SyntaxError geworfen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $wert (beim Setzen) | string | Neues Schema, mit oder ohne abschließenden :, z. B. "https" oder "https:". Die Zuweisung löst eine Navigation aus. |
Rückgabewert
:, z. B. "https:" oder "file:".Beispiele
Aktuelles Protokoll auslesen
// Auf https://programmierung.net/javascript/
console.log(location.protocol);
console.log(location.protocol === 'https:' ? 'Sichere Verbindung' : 'Unverschlüsselt');
Clientseitige Weiterleitung auf HTTPS
// Nur als Notlösung – besser serverseitig per 301 + HSTS
const isLocal = ['localhost', '127.0.0.1'].includes(location.hostname);
if (location.protocol === 'http:' && !isLocal) {
// replace() vermeidet einen zusätzlichen History-Eintrag
location.replace(`https://${location.host}${location.pathname}${location.search}${location.hash}`);
}
Passende WebSocket-URL aufbauen
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const socket = new WebSocket(`${wsProtocol}//${location.host}/live`);
socket.addEventListener('open', () => {
console.log('Verbunden über', wsProtocol);
});
Lokales Öffnen per file: erkennen
if (location.protocol === 'file:') {
console.warn('Seite bitte über einen lokalen Webserver öffnen – fetch() und Module funktionieren unter file: nicht zuverlässig.');
}
// Wichtig · Fallstricke
- Doppelpunkt nicht vergessen: Vergleiche wie
location.protocol === 'https'sind immerfalse– korrekt ist'https:'. - Setzen navigiert: Eine Zuweisung lädt die Seite mit neuer URL; nachfolgender Code läuft ggf. nicht mehr sinnvoll weiter. Für reine URL-Manipulation ohne Navigation besser ein
URL-Objekt verwenden (new URL(location.href)). - Kein Sicherheitsersatz: Eine JavaScript-Weiterleitung auf HTTPS schützt nicht vor Man-in-the-Middle-Angriffen auf die erste HTTP-Anfrage. Serverseitige Umleitung plus
Strict-Transport-Security-Header ist die richtige Lösung. Zur Prüfung auf einen sicheren Kontext eignet sich zudemwindow.isSecureContext(erfasst auchlocalhost). - Spezielle Schemata: Ein Wechsel zwischen speziellen (
http,https,ws,wss,ftp,file) und nicht-speziellen Schemata ist laut URL-Standard nicht erlaubt und wird ignoriert. - In iframes mit
about:blankodersrcdocliefert die Eigenschaft"about:". In Web Workern steht das schreibgeschützte PendantWorkerLocation.protocolzur Verfügung. - Kompatibilität: in allen Browsern seit jeher unterstützt.