概览
头部信息太多,长期更新吧,学到一点更新一点
解决问题1.在代理服务器中如何传递正确IP地址
解决问题2.如何告诉区分哪些资源需要高质量,优先级比较高,即不压缩或权重
解决问题3.乱码情况
解决问题4.如何解决curl的设置gzip后返回结果出现乱码
解决问题5.为什么用telnet模拟请求的时候经常返回400错误码
解决问题6.如何简单的利用User-Agent头部来区分爬虫(可利用此头部区分客户端)
解决问题7.如何获取对方代理服务器和版本
解决问题8.关于消息的转发
解决问题9.关于请求的上下文
解决问题10.关于响应的上下文
解决问题11.关于跨域
解决问题1.在代理服务器中如何传递正确IP地址
X-Forwarded-For
X-Real-IP
解决问题2.如何告诉区分哪些资源需要高质量,优先级比较高,即不压缩或权重
利用质量因子q
Accept头部表示可以接受的资源类型
质量因子跟在资源后面,默认q=1,*/*表示任意
当你有如下Accept头: ①Accept:text/html,application/xml,application/json 将按照如下顺序进行produces的匹配 :①text/html ②application/xml ③application/json②Accept:application/xml;q=0.5,application/json;q=0.9,text/html 将按照如下顺序进行produces的匹配 ①text/html ②application/json ③application/xml q参数为媒体类型的质量因子,越大则优先权越高(从0到1)③Accept:*/*,text/*,text/html将按照如下顺序进行produces的匹配 ①text/html ②text/* ③*/*
解决问题3.乱码情况
需要用到请求编码(gzip会导致curl返回结果出现乱码,在curl测试的时候可以不加)
![](https://img.haomeiwen.com/i20602965/afe645dbeb3fbad7.png)
对应的响应结果
![](https://img.haomeiwen.com/i20602965/0d935c0858bc9f79.png)
解决问题4.如何解决curl的设置gzip后返回结果出现乱码
结尾加上--compressed
解决问题5.为什么用telnet模拟请求的时候经常返回400错误码
可能是地址错误也可能是忘记添加Host请求头部
HTTP1.1规范中明确指出
强制要求 Host 头,让互联网主机托管成为可能
所以一个正确的telnet模拟请求应为
GET / HTTP/1.1
HOST:www.xxxx.com
解决问题6.如何简单的利用User-Agent头部来区分爬虫
User-Agent是请求字段,只出现在请求头里。它使用一个字符串来描述发起 HTTP 请求的客户端,服务器可以依据它来返回最合适此浏览器显示的页面。
但由于历史的原因,User-Agent 非常混乱,每个浏览器都自称是“Mozilla”“Chrome”“Safari”,企图使用这个字段来互相“伪装”,导致 User-Agent 变得越来越长,最终变得毫无意义。
不过有的比较“诚实”的爬虫会在 User-Agent 里用“spider”标明自己是爬虫,所以可以利用这个字段实现简单的反爬虫策略。
解决问题7.如何获取对方代理服务器和版本
利用Server头部
服务端会在响应头部的Server注明自己的版本和工具
![](https://img.haomeiwen.com/i20602965/4a01a9c88616e268.png)
但这个并不是必填字段
![](https://img.haomeiwen.com/i20602965/00ca36af9f3916e6.png)
解决问题8.关于消息的转发
一条HTTP响应可能会经过多个代理服务器
其中可以通过Max-Forwards头部限制最大转发次数(但是仅对TRACE/OPTIONS)
Via头部记录了经过代理服务器的名称和版本
Cache-Control:no-transform可以禁止代理服务器修改响应包体
解决问题9.关于请求的上下文
1.User-Agent 指明了客户端类型的信息
![](https://img.haomeiwen.com/i20602965/d18f67536a1be9a8.png)
2.Referer头部是浏览器对来自某一页面的请求自动添加的头部
其中当浏览器(或者模拟浏览器行为)向web 服务器发送请求的时候,头信息里有包含Referer 。比如我在www.xxxx.com 里有一个www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有:Referer=https://www.xxxx.com信息
可以利用referer做防盗链,每次访问图片资源判断referer
可以防止恶意请求 :
比如我的网站上,静态请求是*.html结尾的,动态请求是*.shtml,那么由此可以这么用,所有的*.shtml请求,必须 Referer 为我自己的网站。
3.From 用于网络爬虫,告诉服务器如何通过邮箱联系到爬虫负责人
解决问题10.关于响应的上下文
Allow告诉客户端该URI允许哪些方法执行
Accept-Ranges 告诉客户端雾浮起上该资源是否允许range请求
解决问题11.关于跨域
简单请求至少需要配置
Access-Control-Allow-Origin '*'/域名 表名指定哪些域可以跨域访问
复杂请求基于跨域访问需要先进行options请求
Access-Control-Allow-Method
Access-Control-Allow-Headers
Access-Control-Max-Age 允许缓存的最长时间
Access-Control-Expose-Headers 告诉浏览器哪些头部可以供给使用
网友评论