前言
在发送HTTP请求时,由于忘记添加host头信息,导致向阿里云服务器发送请求时,服务器响应400,且服务器软件并没有收到请求信息;
但是在局域网中部署一台相同操作系统、相同服务器软件时,请求发送就能成功;
排除服务器软件和操作系统的错误后,发现问题出在host头信息上。在此对host的作用做简单记录。
http请求头中host字段的作用
一个HTTP请求报文的格式为:
1 | POST /user/login HTTP/1.1 |
这段报文中指定了方法POST
,路由/user/login
,协议HTTP/1.1
,以及头信息Host, Content-Type
和内容{}
。
发送这段报文时,通常通过“ip + 端口”指定接收方。
同时,也可以通过“域名 + 端口”指定接收方,通过这种方式发出的请求会被部署在某个位置的域名解析服务器(Domain Name System,DNS)进行解析,获取到域名背后的ip,实质上还是通过ip访问。
但是在互联网中,多个不同的域名可以同时指向一个ip,例如www.ccc.com
, www.aaa.com
, www.bbb.com
三个域名都指向了同一个ip:192.168.0.1
(可以在C:\Windows\System32\drivers\etc\hosts
中添加几行192.168.0.1 www.aaa.com
来实现)
但是服务器收到请求后,能看到的只是发送者的ip地址,并不能识别出域名。
此时记录在头信息中的host字段就派上了用场,它记录了发送请求的客户端所请求的主机信息,常见形式有:
- IP + 端口:
host: '127.0.0.1:8888'
- 域名+端口:
host: 'www.aaa.com:8888'
- 域名或IP,没有端口:
host: '127.0.0.1'
orhost: 'www.aaa.com'
,这种情况一般是默认80或443端口;
这样服务器收到请求后,就可以根据这个字段对不同的域名和端口进行区分。