Start · Sprachen · JavaScript · Referenz · URLPattern.protocol

URLPattern.protocol

Eigenschaft

Schreibgeschützter String mit dem normalisierten Muster, das ein <code>URLPattern</code> für den Protokollteil einer URL (z. B. <code>https</code>) verwendet.

seit JavaScript Chromium 95+, Firefox 142+, Safari 26+ (Baseline 2 Kategorie: webapi

Signatur

get URLPattern.prototype.protocol

Beschreibung

Die Eigenschaft protocol gibt das normalisierte Muster zurück, mit dem ein URLPattern das Schema einer URL prüft, also http, https, ws oder file. Der Wert ist ein Muster-String in der URLPattern-Syntax. Er kann feste Zeichen, Platzhalter (*), benannte Gruppen (:name), reguläre Ausdrücke in Klammern und optionale Gruppen wie http{s}? enthalten.

Der Wert wird beim Erzeugen des Musters festgelegt. Gibt man im Init-Objekt kein protocol an und auch keine baseURL, steht hier "*". Dann passt jedes Protokoll. Bei einer baseURL wird das Protokoll von dort übernommen. Ein abschließender Doppelpunkt wird entfernt: Aus "https:" wird "https".

In der Praxis nutzt man protocol vor allem zum Debuggen und Protokollieren, etwa in Service-Worker-Routern oder bei clientseitigem Routing. So sieht man, welches Protokollmuster ein Muster nach der Normalisierung tatsächlich prüft. Die Eigenschaft ist nur lesbar. Um das Muster zu ändern, erzeugt man ein neues URLPattern.

Rückgabewert

Typ
string
Beschreibung
Das normalisierte Protokollmuster ohne abschließenden Doppelpunkt, z. B. "https", "http{s}?" oder "*", wenn kein Protokoll festgelegt wurde.

Beispiele

Protokollmuster aus verschiedenen Konstruktor-Varianten auslesen

// Vollständiger URL-String
const p1 = new URLPattern('https://example.com/books/:id');
console.log(p1.protocol);

// Init-Objekt mit Doppelpunkt: wird normalisiert
const p2 = new URLPattern({ protocol: 'https:' });
console.log(p2.protocol);

// Kein Protokoll angegeben: Platzhalter
const p3 = new URLPattern({ pathname: '/api/*' });
console.log(p3.protocol);

// Protokoll wird von der baseURL übernommen
const p4 = new URLPattern({ pathname: '/shop/*', baseURL: 'http://localhost:3000' });
console.log(p4.protocol);
https https * http

HTTP und HTTPS mit einer optionalen Gruppe erlauben

const pattern = new URLPattern({
  protocol: 'http{s}?',
  hostname: 'example.com',
  pathname: '/docs/*'
});

console.log(pattern.protocol);
console.log(pattern.test('https://example.com/docs/intro'));
console.log(pattern.test('http://example.com/docs/intro'));
console.log(pattern.test('ftp://example.com/docs/intro'));
http{s}? true true false

Protokoll per Gruppe erfassen und protokollieren (z. B. im Service Worker)

const wsPattern = new URLPattern({ protocol: ':scheme(wss?)', hostname: '*.example.com' });

const match = wsPattern.exec('wss://chat.example.com/room/42');
console.log(`Muster: ${wsPattern.protocol}`);
console.log(match.protocol.input);
console.log(match.protocol.groups.scheme);
Muster: :scheme(wss?) wss wss

// Wichtig · Fallstricke

  • Nur lesbar: Eine Zuweisung wie pattern.protocol = 'http' wird im nicht-strikten Modus ohne Meldung ignoriert und wirft im strikten Modus einen TypeError.
  • Normalisierung: Der zurückgegebene Wert kann vom eingegebenen String abweichen. Ein abschließender Doppelpunkt wird entfernt, und Muster werden kanonisch dargestellt. Vergleiche deshalb nicht blind mit der Eingabe.
  • Standardwert *: Ohne protocol und ohne baseURL passt jedes Schema, auch javascript: oder data:. Bei Sicherheitsprüfungen, etwa für Weiterleitungsziele, sollte das Protokoll daher immer ausdrücklich festgelegt werden.
  • Groß- und Kleinschreibung: Protokolle werden in der Regel kleingeschrieben verglichen. Die Option ignoreCase betrifft alle Teile des Musters.
  • Kompatibilität: URLPattern gibt es seit Chromium 95, in Firefox erst ab Version 142 und in Safari ab 26. In älteren Browsern hilft ein Polyfill wie urlpattern-polyfill. In Node.js ist es ab 23.8 global verfügbar.