http请求头的顺序 |
您所在的位置:网站首页 › 网关插口有固定顺序吗 › http请求头的顺序 |
http协议请求头我们再熟悉不过了,一些诸如content-type,etag等等的协议头规定了我们如何使用http协议,以及反映着一些资源的状态。但是我们有注意过http请求头的顺序吗? 最近在做爬虫程序时发现了这个问题,在爬到某某网站时,发现之前的爬虫程序一直被爆40X错误,很是纳闷,我都是按照浏览器的请求头来伪造的,加上了referr还是如此。怀疑是因为利用算法禁止了ip地址,于是单独请求,发现还是有部分请求被挡住了,爬虫程序无法正常工作了。 但是浏览器端刷新一直很正常,于是将浏览器的请求头按照原封不动的顺序拷入爬虫程序,发现其可以正常使用了。 http请求头真的有顺序吗?下面我们看一下各个浏览器的http请求头情况。 使用nodejs代码: var http = require('http'), server = http.createServer(function (req, res){ var body = JSON.stringify(req.headers) + '\n' + Object.keys(req.headers); res.end(body); }).listen(3000); 我们分别看下chrome、ff还有IE下的截屏:![]() 第一次请求头顺序如下:
我们变化了host,accept还有referer的位置: headers:{ 'host':'192.168.1.220', 'Referer':'http://www.cnodejs.org/', 'Content-Type':'application/x-www-form-urlencoded', 'Content-Length':'19', 'User-Agent':'node.js-v0.8.8', 'cookie':'userid=123456; mycookie2=abcdefg', 'X-Requested-With':'xmlhttprequest', 'Connection':'keep-alive', 'Accept':'text/html',}第二次顺序如下:
我们看到,请求头的顺序根据我们发送headers的顺序改变了,所以http请求头是有顺序的。原因么因为http协议是基于TCP的,而tcp协议有一个重要的准则,它会严格的根据你发送的数据顺序传输数据,这也就保证了http请求头的顺序。 所以我们也可以利用这一点来对付爬虫程序,因为一般的浏览器都有一定的http请求头顺序,比如accept 必须在accpet-language和accpet-encoding之前。
(转载) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |