Start · Sprachen · JavaScript · Referenz · Location.protocol

Location.protocol

Eigenschaft

Liefert oder setzt das Protokoll (Schema) der aktuellen Seiten-URL einschließlich des abschließenden Doppelpunkts, z. B. <code>"https:"</code>.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

Location.protocol

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

Typ
string
Beschreibung
Das Schema der aktuellen URL in Kleinbuchstaben inklusive :, 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');
https: Sichere Verbindung

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);
});
Verbunden über wss:

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 immer false – 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 zudem window.isSecureContext (erfasst auch localhost).
  • 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:blank oder srcdoc liefert die Eigenschaft "about:". In Web Workern steht das schreibgeschützte Pendant WorkerLocation.protocol zur Verfügung.
  • Kompatibilität: in allen Browsern seit jeher unterstützt.