HTTP中是否需要端口号;主持人;标题参数?

HTTP中是否需要端口号;主持人;标题参数?,http,http-headers,Http,Http Headers,假设我向:foosite.com发出HTTP请求,但我实际发送请求的端口是6103,我不会将该端口放在主机头中,例如: GET /barpage HTTP/1.1 Host: foosite.com Method: GET http服务器是否应该识别我正在尝试在端口6103上与它对话?或者因为它在请求头中被省略了,我是否在赌服务器是否真的识别了它 我问这个问题是为了说明这一点:我发现浏览器,至少是firefox+chrome,将端口放在Host头中。但是我正在使用的Java应用程序没有。当端口

假设我向:
foosite.com
发出HTTP请求,但我实际发送请求的端口是6103,我不会将该端口放在
主机
头中,例如:

GET /barpage HTTP/1.1
Host: foosite.com
Method: GET
http服务器是否应该识别我正在尝试在端口6103上与它对话?或者因为它在请求头中被省略了,我是否在赌服务器是否真的识别了它


我问这个问题是为了说明这一点:我发现浏览器,至少是firefox+chrome,将端口放在
Host
头中。但是我正在使用的Java应用程序没有。当端口未传递到
主机中时
服务器会做出响应,认为我在端口80上。那我需要纠缠谁呢?服务器操作员或Java程序员?

请参阅哪一个指定如果端口不是默认端口(HTTP为80,HTTPS为443),则应包括该端口。

为现代浏览器更新:

浏览器(和curl)只会在端口不是标准端口时添加端口,如@superfell中所述

当端口为标准端口时(http端口80、https端口443),今天(2013年)的浏览器实际上将从主机头中剥离该端口。有些客户使用自己的方法,比如百度蜘蛛

这是否合适,我不知道。当使用的端口是默认端口时,规范没有说明是否可以包含端口号

为了回答您的问题,服务器将做任何他们需要做的事情以符合规范,并且规范只建议需要的情况。因此,我觉得这实际上不是服务器如何处理的问题,而是客户机如何发出请求:是否在主机头中包含端口号。RFC2616指出

没有任何尾随端口信息的“主机”表示默认值 请求的服务的端口(例如,HTTP URL的“80”)。对于 例如,在源服务器上请求 将适当包括:

这意味着也不需要后续端口,因为默认端口为https所知。我检查了来自Firefox、Chrome和Edge的HTTP请求,发现当域协议为https时,它们都没有为主机头添加端口号。确保在将端口号也添加到URL时添加端口号。下面的屏幕截图来自谷歌浏览器


发送到可能不存在的服务器“”的实际请求的示例标头

RFC需要一些阅读培训

第14:24节将所有要素转化为简单现实并非易事:

Host = "Host" ":" host [ ":" port ] ;
主机头语法:

主持人:

如果不是默认值,则在主机后放置端口:


Host:example.com:1337

6103是HTTPI agree with@NullUserException的一个奇怪端口。HTTP默认为端口80,因此我会与您的Java开发人员联系,确保他们在调用中包含非标准端口。它基本上是用于房地产清单的API服务。特别是RETS。为多个上市服务提供RET的公司倾向于为其提供子域或主域之外的端口,如socalmls.someretscompany.com或someretscompany.com:6111。不要问我他们为什么使用端口。我只是在这里工作;)是的,我在RFC上也看到了。我可能应该注意到这一点。我希望有人能说一些有知识的话,特别是知道某些web服务器和web应用程序框架是如何响应这种请求的,比如:“一些web服务器/应用程序框架可以处理它,但X和Y不能”等等。最终我希望接受RFC的说法,但我会在我放弃前一天提出这个问题。谢谢你,现在我知道这是一个好问题!需要澄清的是,RFC表示如果不是协议的默认端口。并给出一个例子,如果它应该是80。如果是HTTPS,则默认值为443(即在HTTPS请求中,可能不包括443端口)。规范明确规定,可以包括端口号(命名机构包括端口),即端口号是必需的,除非它是服务的默认值。我想补充一点:我注意到一些代理,或者,充当反向代理的web服务器可能会重写此操作。使用NGINX的前置应用程序服务器的常见配置是设置主机头和:。在这种配置下运行时,最终的结果是浏览器所做的,以及各种web代理、WAF和web服务器在任何应用程序代码接收到标头之前可能对标头所做的操作的组合。我注意到,如果加载
http://www.facebook.com:80/example
并在主机标题中包含:80,它会将您重定向到
https://www.facebook.com:80/example
这显然不起作用。如果你的客户不这样做破坏了Facebook,你最好这样做。
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
Host = "Host" ":" host [ ":" port ] ;