假设我发出一个HTTP请求:foosite.com
但实际发送请求的端口是6103,我不要将该端口放在Host
标头中,例如:
GET /barpage HTTP/1.1 Host: foosite.com Method: GET
应该http服务器然后识别我正试图在端口6103上与它通话?或者因为它在请求标题中被省略了我在赌博,如果服务器实际上认识到这一点?
我问这个问题:我发现浏览器,至少是firefox + chrome,把端口放在Host
头部.但我正在使用的Java应用程序没有.当端口没有通过时,Host
服务器会回复以为我在端口80上.所以我需要獾?服务器操作员还是Java程序员?
请参阅HTTP规范的第14.23节,该规范指定如果端口#不是默认端口80,则应包括端口#.
更新为现代浏览器:
浏览器(和curl)将仅在不是标准端口时添加端口,这是HTTP规范所要求的,并在@ superfell的答案中注明.
浏览器今天(2013年),当端口是标准端口(http端口80,https端口443)时,实际上将从主机头端剥离端口.一些客户端使用自己的方法,如百度蜘蛛,即使端口为80,也包括端口号.
不管这是否合适,我不知道.当使用的端口是默认端口时,规范没有说明是否可以包含端口号.
为了回答您的评论,服务器将做他们需要做的任何事情以符合规范,并且规范仅建议在需要时的情况.因此,我觉得这不是服务器如何处理它的问题 - 更多的是客户端发出请求的方式:包括主机头中的端口号,或不.