Web前端之路让前端飞网络相关

http头中Host字段的作用

2017-11-12  本文已影响3391人  Spring_Bear

http报文头部包含了请求方法,请求的资源等信息,但是对于Host字段一直觉得可有可无,因为我所认为的Host的字段的作用在于指明http报文的方向,访问的地点,但是实际报文转发都是由底层目的端口IP决定了,所以觉得Host字段没有用。

问题

问题在于当我写的一个socket代理上,我的目的是把所有请求的报文全部重定向到一个固定的IP和端口上,想法很简单,接收请求,新建socket,连接到固定IP和端口,转发请求。结果报错:

socket.error: [Errno 104] Connection reset by peer

这个错误一般出在C/S模式中一方数据还在等待,一方却关闭了连接。我把重定向取消,即连接到原先请求想要请求的网址,程序正常运行。那么问题出在哪?

原因

前面讲了,就是http请求头的问题,http请求头第一行指明请求资源,若是没有该资源,会返回一个错误页面,但是起码是有返回信息的。但是如果Host这个字段错误,服务端就会丢弃这个连接,而客户端还在等待接收,这样就会报错。那么Host字段的作用是什么。

Host字段

我们知道,不同的域名通过A记录或者CNAME方式可以连接都同一个IP下,同一个IP也可以设置多个不同站点,那我访问不同的域名都转发到同一IP,怎么区分这些不同的站点呢,就是用的Host字段,如果服务器后台解析出Host但是服务器上找不到相应的站点,那么这个连接很可能会被丢弃,从而报错。
我在程序当中将Host修改成

Host: www.baidu.com

再将请求的资源路径修改成“/”,socket定向到百度的IP,访问成功百度首页,且不会报错。

总结

小错误,却花了点时间解决,mark一下。

参考

网络---一篇文章详解请求头Host的概念

上一篇 下一篇

猜你喜欢

热点阅读