HTTP请求头host解析
Host: 域名
Host表示请求的服务器网址;
request headers中的host字段
例如有user.xiaoqiang.com,hotel.xiaoqiang.com
现在需要登录后去请求hotel.xiaoqiang.com的数据。
在通过user.xiaoqiang.com/login.do登录成功后,要去请求hotel.xiaoqiang.com的数据。
通过python模拟这些请求,需要模拟请求头:
reqheaders={'Content-type':'application/x-www-form-urlencoded', 'Accept':'*/*', 'Host':'user.xiaoqiang.com', 'Origin':'http://user.xiaoqiang.com', 'Referer':'http://user.xiaoqiang.com/passport/login.jsp?ret=http%3A%2F%2Fuser.xiaoqiang.com%2Fuserinfo%2Findex.jsp', 'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1',}
请求数据:
reqdata={'username':'', 'password':'', 'loginType':'0', 'ret':'http://hotel.xiaoqiang.com/nprice/xiaoqiangtest/Query.jsp?cityurl=&fromDate=2014-03-22&toDate=2014-03-25&seq=beijing_city_2642&status=true','remember':0,'vcode':''}
针对user.xiaoqiang.com/login.do登录,请求头中host就是user.xiaoqiang.com。
在登录成功后,直接用登录请求的request headers 去请求hotel.xiaoqing.com的数据,此时服务器返回404,很郁闷,不知道到底是为什么。
最后发现是,用于登录的request headers 里边的host是user.xiaoqiang.com,传到服务器以后,hotel.xiaoqiang.com不响应这个请求,所以说是404,就等于在user.xiaoqiang.com上边找不到hotel.xiaoqiang.com的请求
在重新修改request headers里边的host为hotel.xiaoqiang.com,请求即可被hotel.xiaoqiang.com接受,服务器提供了服务,得到了正确的响应。
综上所述,个人理解host字段是代表,你的请求将要达到那台主机,并会在服务端被验证,如果不符合,就不能正确处理客户端的请求。