反骨仔

一个业余的 .NET Core 攻城狮

0%

04 HTTP 协议 Header 介绍

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

image-20210102202029040

image-20210102202050809

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,这样就能伪装成任何客户端 。操作步骤如下:

  1. 启动 Fiddler ,单击 Rules -> User-Agents ,选择 iPhone6

image-20210102203312191

  1. 打开浏览器,输入 http://www.taobao.com,可以看到淘宝的页面变成了移动版的淘宝页面

  2. 在 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,网站会认为是盗链。

  1. http://www.tianya.cn 中找到 一 张图片的网址 ,例如 http://img3.laibafile.cn/p/m/280148719.png
  2. 启动 Fiddler,打开浏览器 , 直接输入 http://img3.laibafile.cn/p/m/280148719.png
  3. 我们可以看到图片上显示“该图片仅供天涯社区用户分享 ”
  4. 在 Fiddler 中可以看到 HTTP 请求中没有 Referer,所以被 Web 服务器认为是盗链。

image-20210102203810102

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 进行了分类。

image-20210102204308441

4.4 Fiddler 查看和复制 Header

在 Inspectors 下面的 Headers tab 窗口里,我们可以很方便地查看或者复制 Header

image-20210102204350862

参考

  • 《HTTP 抓包实战》