Der Hostname muss mit der folgenden Syntax übereinstimmen:
hostname = domainlabel [ "." ] | 1*( domainlabel "." ) toplabel [ "." ]
domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
toplabel = alpha | alpha *( alphanum | "-" ) alphanum
Wie Sie sehen können, ist nur .und -erlaubt, _nicht.
Sie sagen dann, dass dies //5-12-145-35_s-81:443zulässig ist, aber nicht für den Hostnamen .
Um zu sehen, wie sich das auswirkt:
URI uriBadHost = URI.create("//5-12-145-35_s-81:443");
System.out.println("uri = " + uriBadHost);
System.out.println(" authority = " + uriBadHost.getAuthority());
System.out.println(" host = " + uriBadHost.getHost());
System.out.println(" port = " + uriBadHost.getPort());
URI uriGoodHost = URI.create("//example.com:443");
System.out.println("uri = " + uriGoodHost);
System.out.println(" authority = " + uriGoodHost.getAuthority());
System.out.println(" host = " + uriGoodHost.getHost());
System.out.println(" port = " + uriGoodHost.getPort());
Ausgabe
uri = //5-12-145-35_s-81:443
authority = 5-12-145-35_s-81:443
host = null
port = -1
uri = //example.com:443
authority = example.com:443
host = example.com
port = 443
Wie Sie sehen können authority, ist das hostund , wenn das einen gültigen Hostnamen hat, das undport analysiert, wenn sie , aber wenn sie nicht gültig sind, werden authoritysie als Freiformtext behandelt und nicht weiter analysiert.
AKTUALISIEREN
Aus dem Kommentar:
System.out.println( new URI(null, null, "/5-12-145-35_s-81", 443, null, null, null))Ausgänge: /// 5-12-145-35_s-81: 443. Ich gebe es als Hostnamen
Das URI Konstruktor, den Sie aufrufen, ist eine praktische Methode, die einfach eine vollständige URI-Zeichenfolge erstellt und diese dann analysiert.
Übergeben "5-12-145-35_s-81", 443wird //5-12-145-35_s-81:443.
Vorbeigehen"/5-12-145-35_s-81", 443 wird ///5-12-145-35_s-81:443.
Im ersten Fall handelt es sich um einen Host und einen Port , die nicht analysiert werden können.
Im zweiten Teil ist der Autoritätsteil leer und /5-12-145-35_s-81:443ein Pfad .
URI uri1 = new URI(null, null, "/5-12-145-35_s-81", 443, null, null, null);
System.out.println("uri = " + uri1);
System.out.println(" authority = " + uri1.getAuthority());
System.out.println(" host = " + uri1.getHost());
System.out.println(" port = " + uri1.getPort());
System.out.println(" path = " + uri1.getPath());
Ausgabe
uri = ///5-12-145-35_s-81:443
authority = null
host = null
port = -1
path = /5-12-145-35_s-81:443