Signatur
Beschreibung
Die Eigenschaft host eines URL-Objekts enthält den Hostnamen (hostname). Ist in der URL ein Port angegeben, folgen ein Doppelpunkt und der Port (port). Beispiel: Bei https://api.example.com:8443/v1 liefert host den Wert "api.example.com:8443". Hat die URL keinen Host (etwa bei data:- oder mailto:-URLs), ist der Wert ein leerer String.
Die Eigenschaft kann gelesen und geschrieben werden. Beim Schreiben wird der neue Wert als Host geparst. Enthält er einen Port, wird auch port aktualisiert. Enthält er keinen Port, bleibt der bisherige Port unverändert. Ungültige Werte werden stillschweigend ignoriert, es gibt also keine Ausnahme.
In der Praxis brauchen Sie host, wenn Sie Hostname und Port gemeinsam betrachten wollen. Typische Fälle sind die Prüfung, ob ein Link zur eigenen Anwendung gehört, das Umschreiben von URLs auf eine andere Umgebung (z. B. von Produktion auf localhost:3000) oder das Protokollieren von Zielservern. Wenn der Port keine Rolle spielt, nehmen Sie hostname. Für Sicherheitsprüfungen ist origin meist die bessere Wahl, weil diese Eigenschaft auch das Schema enthält.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | string | Nur beim Schreiben: neuer Host, wahlweise mit Port, z. B. "example.org" oder "localhost:3000". Ungültige Werte werden ignoriert. |
Rückgabewert
:port, falls ein Port gesetzt ist, der nicht der Standardport ist. Bei URLs ohne Host ist der Wert ein leerer String. IPv6-Adressen stehen in eckigen Klammern, internationale Domainnamen erscheinen in Punycode.Beispiele
Host auslesen, mit und ohne Port
const api = new URL('https://api.example.com:8443/v1/users?id=7');
console.log(api.host); // Hostname + Port
console.log(api.hostname); // nur der Hostname
// Standardport 443 bei https wird weggelassen
const site = new URL('https://example.com:443/');
console.log(site.host);
// URL ohne Host
console.log(new URL('mailto:info@example.com').host === '');
URL auf lokale Entwicklungsumgebung umschreiben
const toLocal = (href) => {
const url = new URL(href);
url.protocol = 'http:';
url.host = 'localhost:3000'; // setzt Hostname UND Port
return url.href;
};
console.log(toLocal('https://shop.example.com/cart?item=42'));
Externe Links auf der Seite erkennen
// Alle Links markieren, die auf einen fremden Host zeigen
const currentHost = location.host;
document.querySelectorAll('a[href]').forEach((link) => {
const url = new URL(link.href, location.href);
if (url.host && url.host !== currentHost) {
link.target = '_blank';
link.rel = 'noopener noreferrer';
}
});
IPv6, Punycode und das Setzen ohne Port
console.log(new URL('http://[::1]:8080/').host);
console.log(new URL('https://münchen.de/').host);
const url = new URL('https://a.example:8080/');
url.host = 'b.example'; // kein Port angegeben, also bleibt 8080
console.log(url.host);
url.host = 'ungültig host'; // ungültig, wird ignoriert
console.log(url.host);
// Wichtig · Fallstricke
- Standardports werden weggelassen:
:80beihttp:und:443beihttps:tauchen inhostnicht auf. Vergleichen Sie daher geparste URLs miteinander und nicht rohe Zeichenketten. - Setzen ohne Port behält den alten Port: Mit
url.host = 'neu.example'bleibt ein vorhandener Port erhalten. Soll der Port entfernt werden, setzen Sie zusätzlichurl.port = ''oder verwenden Siehostname. - Kein Fehler bei ungültigen Werten: Ungültige Zuweisungen werden stillschweigend verworfen. Prüfen Sie den Wert nach dem Setzen, wenn es darauf ankommt.
- Sicherheit: Verlassen Sie sich bei Zugriffsprüfungen, CORS- oder Weiterleitungslogik nicht allein auf
host.originberücksichtigt auch das Schema (httpgegenüberhttps). Prüfungen wiehost.endsWith('example.com')lassen sich mitevil-example.comumgehen. - Internationale Domains werden in Punycode zurückgegeben (
xn--…), nicht in Unicode. - Kompatibilität: In allen modernen Browsern verfügbar, ebenso in Node.js (globales
URLab Version 10) und in Web Workern. Die Eigenschaft gibt es auch beiLocation(location.host) undHTMLAnchorElement.