Signatur
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
"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);
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'));
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);
// Wichtig · Fallstricke
- Nur lesbar: Eine Zuweisung wie
pattern.protocol = 'http'wird im nicht-strikten Modus ohne Meldung ignoriert und wirft im strikten Modus einenTypeError. - 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
*: Ohneprotocolund ohnebaseURLpasst jedes Schema, auchjavascript:oderdata:. 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
ignoreCasebetrifft alle Teile des Musters. - Kompatibilität:
URLPatterngibt es seit Chromium 95, in Firefox erst ab Version 142 und in Safari ab 26. In älteren Browsern hilft ein Polyfill wieurlpattern-polyfill. In Node.js ist es ab 23.8 global verfügbar.