HTTP 请求和 HTTP 响应中有很多 Header, HTTP 请求方法和 HTTP Header 配合工作,共同决定客户端和服务器能做什么事情。
4.1 HTTP Header 介绍
HTTP 请求中有 Header, HTTP 响应中也有 Header。使用 Fiddler 的 Raw 选项卡可以看到完整的 Header 。
Header 的语法格式是“ key:value“,一行一个 Header。每一个 Header 都有特殊的作用,在 Fiddler 中可以查看完整的 Header。
4.2 Fiddler 查看 HTTP 请求 Header
使用 Fiddler 能很方便地查看 HTTP 请求 Header。选中一个 HTTP 请求,单击 Inspectors tab -> Request tab -> Headers
4.2.1 Cache 相关的 Header
HTTP 请求和 HTTP 响应中都有很多用于缓存的 Header。
HTTP 缓存是指当 Web 请求抵达缓存时,如果本地有“己缓存的”副本,就可以从本地存储设备而不是从原始服务器中提取这个文档。
4.2.2 Cookies
Cookie 是一种 HTTP Header,是 HTTP 中非常重要 的内容 。它由 key=value 的形式组成,比如 ip_coun町=CN 。
浏览器把 Cookie 通过 HTTP 请求中的“ Cookie:header,,发送给 Web 服务器,Web 服务器通过 HTTP 响应中的“Set-Cookie:header“ ,把 Cookie 发送给浏览器。
4.2.3 Accept
Accept 表示浏览器客户端可 以接受的媒体类型。
例如,Accept:text/html 代表浏览器可 以接受服务器返回 html ,也就是我们通常说的 html 文档。
通配符*代表任意类型 , 例如 Accept: text/html,*/*;q=0. 8 代表浏览器可以处理所有的类型。一般浏览器客户 端给 Web 服务器发送的都是这个 。
4.2.4 Accept-Encoding
Accept-Encoding 跟压缩有关,浏览器发送 HTTP 请求给 Web 服务器, HTTP 请求中的 Header 有 Accept-Encoding: gzip, deflate (告诉服务器 ,浏览器支持 gzip 压缩〉。
4.2.5 Accept-Language
Accept-Language 的作用是浏览器声明自己接受的语言
语言跟字符集的区别在于:中文是语言,中文有多种字符集,比如 big5、gb2313 、gbk 等。示例如下:
Accept-Language: en-US ,en ; q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW; q=0 .2
4.2.6 User-Agent
User-Agent 的作用是浏览器用来告诉服务器,客户端使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
1 | User-Agent: Mozilla/5.0(Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0<br> |
这个代表客户端用的是 64 位 winlO 系统,Firefox 是 40.0 版本 。
假如用于机的 APP 访问网站,APP 中的 HTTP 请求可能会包含如下的 User-Agent:
1 | User-Agent:Dalvik/2.1.0 (Linux; U; Android 6.0; Redmi Note 4 MIUI/ V8.5.2.0.MBFCNED) |
这个 User-Agent 表示客户 端用的是红米 Note 4, Android 6.0 版本。
如果我们想模拟各种不同的客户端,只需要修改 User-Agent,就可以伪装成各种客户端。
4.2.7 实例:Fiddler 修改 User-Agent,伪装客户端
Fiddler 可以 帮我们修改 User-Agent,这样就能伪装成任何客户端 。操作步骤如下:
- 启动 Fiddler ,单击 Rules -> User-Agents ,选择 iPhone6
-
打开浏览器,输入 http://www.taobao.com,可以看到淘宝的页面变成了移动版的淘宝页面
-
在 Fiddler 中,我们可以查看 User-Agent 的值如下:
1 | User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4 |
4.2.8 Referer
HTTP 协议头中的 Referer 主要用来让服务器判断来源页面,即用户是从哪个页面来的。网站通常用其来统计用户来源,看用户是从搜索页面来的,还是从其他网站链接过来的,或是从书签等访问的,以便合理定位网站 。
Referer 有时也被用作防盗链,即下载时判断来源地址是不是在网站域名之内,否则就不能下载或显示 。 很多网站,如天涯就是通过 Referer 页面来判断用户是否能够下载图片的 。
【实例】天涯网站中的 图片会验证 Referer:如果没有 Referer,网站会认为是盗链。
- 在 http://www.tianya.cn 中找到 一 张图片的网址 ,例如 http://img3.laibafile.cn/p/m/280148719.png
- 启动 Fiddler,打开浏览器 , 直接输入 http://img3.laibafile.cn/p/m/280148719.png
- 我们可以看到图片上显示“该图片仅供天涯社区用户分享 ”
- 在 Fiddler 中可以看到 HTTP 请求中没有 Referer,所以被 Web 服务器认为是盗链。
4.2.9 Connection
从 HTTP/1.1 起,系统默认都开启了 Connection:Keep-Alive
,保持连接特性。
HTTP 协议是基于 TCP 协议的 。当一个网页完全打开后 ,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭;如果客户端再次访问这个服务器上的网页,将会继续使用这一条己经建立的连接。
Keep-Alive 不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如 Apache)中设定这个时间。
4.2.10 Host
Host 这个 Header 是必需的,它的作用是指定被请求的主机和端口号,它通常从 HTTP URL 中提取出来。
【实例】我们在浏览器中输入 https://www.cnblogs.com/liqingwen,浏览器发送的 HTTP 请求中就会包含 Host 的 Header,例如 Host: www.cnblogs.com 。 此处使用了默认端口 80。
如果指定了端口号,例如我们在浏览器中输入 http://www.669.icu:15375,则 Header 变为 Host: www.669.icu:15375
4.3 Fiddler 查看 HTTP 响应 Header
如图所示,单击“Inspectors tab”,在 HTTP 响应中单击“ Headers“能看到 Fiddler 对 HTTP 响应 Header 进行了分类。
4.4 Fiddler 查看和复制 Header
在 Inspectors 下面的 Headers tab 窗口里,我们可以很方便地查看或者复制 Header
参考
- 《HTTP 抓包实战》