wake-up-neo.com

Ist in HTTP "Host" -Headerparameter eine Portnummer erforderlich?

Angenommen, ich sende eine HTTP-Anfrage an: foosite.com, aber der Port, an den ich die Anfrage tatsächlich sende, ist 6103, und ich setze diesen Port NICHT in den Host-Header.

GET /barpage HTTP/1.1
Host: foosite.com
Method: GET

Sollte der http-Server dann erkennen, dass ich versuche, an Port 6103 mit ihm zu sprechen? Oder weil es im Request-Header ausgelassen wurde, bin ich Glücksspiel, wenn der Server dies tatsächlich erkennt?

Ich frage diese Frage, um dies zu sagen: Ich habe festgestellt, dass Browser, zumindest Firefox + Chrome, den Port in den Host-Header setzen. Aber die Java-App, die ich verwende, funktioniert nicht. Und wenn der Port nicht in der Host übergeben wird, antwortet der Server mit dem Gedanken, ich bin auf Port 80. Der Server-Operator oder der Java-Programmierer?

44
Jon Mabe

Siehe Abschnitt 14.23 der HTTP-Spezifikation , die angibt, dass die Portnummer eingeschlossen werden soll, wenn sie nicht der Standardport von 80 ist.

50
superfell

AKTUALISIERT für moderne Browser:

Browser (und curl) fügen den Port nur hinzu, wenn es sich nicht um den Standardport handelt, wie in HTTP-Spezifikation und in @ superfells Antwort angegeben.

Browser an diesem Tag (2013) entfernen den Port aus dem Host-Header, wenn der Port der Standard ist (http-Port 80, https-Port 443). Einige Clients, die ihre eigene Methode verwenden, wie der Baidu Spider, einschließlich der Portnummer, auch wenn der Port 80 ist .

Ob das richtig ist oder nicht, weiß ich nicht. Die Spezifikation sagt nicht aus, ob es in Ordnung ist, die Portnummer anzugeben, wenn der Port standardmäßig IS verwendet.

Zur Beantwortung Ihres Kommentars tun die Server alles, um der Spezifikation zu entsprechen, und die Spezifikation schlägt nur die Fälle vor, in denen dies erforderlich ist. Aus diesem Grund habe ich das Gefühl, dass Es ist nicht wirklich eine Frage, wie der Server damit umgeht - es ist eher so, wie der Client die Anforderung ausgibt: Die Portnummer wird in den Host-Header aufgenommen oder nicht.

7
Gaia

Beispielheader einer tatsächlichen Anforderung an einen hoffentlich nicht vorhandenen Server ' http://myhost.com:3003/content/page.htm '

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US;q=0.9,en;q=0.8,nb;q=0.7,de;q=0.6
Connection: keep-alive
Host: myhost.com:3244
Referer: http://myhost.com:3244/content/page.htm

Der RFC https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html benötigt zum Lesen einige Schulungen.

Abschnitt 14:24 Es ist nicht so einfach, alle Elemente in die einfache Realität zu übersetzen:

Host = "Host" ":" Host [ ":" port ] ;
0
flodis

RFC2616 gibt an, dass

Ein "Host" ohne nachgestellte Anschlussinformationen impliziert den Standardwert Port für den angeforderten Dienst (z. B. "80" für eine HTTP-URL). Zum Beispiel: Eine Anfrage auf dem Origin-Server für http://www.w3.org/pub/WWW/ würde ordnungsgemäß Folgendes enthalten:

GET /pub/WWW/ HTTP/1.1
Host: www.w3.org

Dies bedeutet, dass https://example.com keinen nachlaufenden Port benötigen würde, da der Standardport für https bekannt ist. Ich habe die HTTP-Anforderungen von Firefox, Chrome und Edge überprüft und festgestellt, dass keine Portnummer für den Hostheader hinzugefügt wurde, wenn das Domänenprotokoll https war. Sicherlich wird die Portnummer hinzugefügt, wenn die Portnummer auch der URL hinzugefügt wurde. Die folgenden Screenshots stammen von Google Chrome

 Host header for a HTTP 1.1 request using https procotole  Host header for a HTTP 1.1 resquest using a https with a port number in the URL

0