HTTP协议
HTTP ("超文本传输协议") 是一种应用非常广泛的 应用层协议。
HTTP协议的工作过程
当我们在浏览器中输入一个 "网址", 此时浏览器就会给对应的服务器发送一个 HTTP 请求。对方服务器收到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应。
HTTP协议格式
HTTP协议是一种"一问一答"结构模型的协议。
HTTP的报文格式分为两个部分:请求和响应。请求和相应的协议格式是有所差异的。
抓包工具
抓包工具是一类可以对数据通信过程中的所有IP报文实施捕获并进行逐层拆包分析的软件。抓包工具相当于是一个“代理程序”,浏览器给服务器发的请求,就会经过这个代理程序,进一步就能分析出请求和响应的结果,从而理解发送端和接受端的交互细节。
Fiddler
Fiddler是专门抓取HTTP的抓包工具。它位于客户端和服务器端的HTTP代理,可以记录并分析HTTP请求和响应。
Fiddler官网:Fiddler | Web Debugging Proxy and Troubleshooting Tools
Fiddler配置
Fiddler进入之后需要进行一个简单的配置,因为默认是只能抓取HTTP协议的包,但是现在网络上基本都是HTTPS协议,因此需要我们配置成可以抓取HTTPS的包。
这样我们就能抓取HTTPS的包了。
Fiddler使用
要抓包之前可以先选中任意一个包,按着Ctrl+A,再按Delete删除,不然包太多了,会干扰到我们。
我们可以根据颜色来区分:黑色的一般是普通数据包,蓝色的是HTML包,紫色的是响应内容是CSS文件,绿色的是响应内容是Script文件,灰色的是数据流类型CONNECT或响应内容是图片,黄色的是HTTP状态需用户认证,红色的则是HTTP状态错误 。
如以下图来助于我们理解:
左侧窗口显示了所有的 HTTP请求/响应, 可以选中某个请求查看详情。
右侧上方显示了 HTTP 请求的报文内容。(切换到 Raw 标签页可以看到详细的数据格式)
右侧下方显示了 HTTP 响应的报文内容。(切换到 Raw 标签页可以看到详细的数据格式)
请求和响应的详细数据,可以通过右下角的 View in Notepad 通过记事本打开。
HTTP报文格式
一般请求和响应的报文格式分为四个部分:首行,请求头/响应头,空行,正文。
这里空行是请求头结束的标记。
现在我们来抓包百度的搜索网页:
HTTP请求(Request)
现在我们来抓包百度的搜索网页:
这就是我在输入百度网址的请求报文
首行
在首行中,有三个信息部分,三个部分用"空格"来分割:
(1)GET:HTTP请求的"方法"(Method)
认识方法
方法 | 说明 | 支持的HTTP协议版本 |
GET | 获取资源 | 1.0、1.1 |
POST | 传输实体主体 | 1.0、1.1 |
PUT | 传输文件 | 1.0、1.1 |
HEAD | 获得报文首部 | 1.0、1.1 |
DELETE | 删除文件 | 1.0、1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理 | 1.1 |
LINK | 建立和资源之间的联系 | 1.0 |
UNLINK | 断开连接关系 | 1.0 |
(2)URL(俗称网址):
唯一的资源定位符,描述了一个资源在网络的位置。
(3)版本号:HTTP/1.1
HTTP版本号:有HTTP1.0,HTTP1.1,HTTP2,HTTP3,现在主流的还是HTPP1.1
请求头(Header)
Header 的整体的格式也是 "键值对" 结构。每个键值对占一行。键和值之间使用分号分割。
Host:表示服务器主机的地址和端口
Content-Length:表示 body 中的数据长度
Content-Type:表示请求的 body 中的数据格式
注意:
请求里有Body,才会有这两个属性。通常情况下GET请求没有Body,Post请求有Body。
User-Agent (简称 UA):表示浏览器/操作系统的属性
Referer:表示这个页面是从哪个页面跳转过来的
Cookie:Cookie可以认为是浏览器在本地存储数据的一种机制。Cookie 中存储了一个字符串, 这个数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服务器在 HTTP 响应的 Header 中通过 Set-Cookie 字段给浏览器返回数据)
浏览器的数据来自服务器,浏览器后续的操作也是要提交给服务器的。服务器这边管理了一个网站的各种核心数据,但是程序运行过程中,也会有一些数据需要在浏览器这边存储,并且在后续请求的时候数据可能需要再发给服务器。
实际上更容易想到的是:把这样的数据直接存储在本地文件中,但是浏览器为了考虑到安全性就禁止网页直接访问你的电脑文件系统。为了保证安全性又能进行存储数据就引入了Cookie。
Cookie往往是从服务器返回的数据。(也可以是页面自己生成)
Cookie存储到浏览器所在主机的硬盘上,并且是按照域名为维度来存储的。(每个域名下可以存自己的Cookie,彼此之间不影响)
Cookie是按照键值对的形式来组织的。
空行
表示Header结束的标志
正文(Body)
通常情况下GET请求没有Body,Post请求有Body。
HTTP响应(Response)
这是我们在浏览器输入百度网址后抓取的响应:
响应的报文格式分为四个部分:首行,响应头,空行,正文。
状态码
状态码表示访问一个页面的结果。 (是访问成功,还是失败, 还是其他的一些情况)
以下就是搜索百度网页响应的状态码:
常见的状态码
200 OK(表示成功)
301 Moved Permanently(永久重定向)
302 Move temporarily(临时重定向)
重定向:(重定向就有点像爱情转移,现在的人失恋了心里非常难受很好的办法就是"爱情转移",把你对这个人的感情转移到另一个人身上。)就相当于手机号码中的 "呼叫转移" 功能,比如我本来的手机号是 1111111,后来换了个新号码 2222222, 那么不需要让我的朋友知道新号码, 只要我去办理一个呼叫转移业务,其他人拨打 1111111,就会自动转移到 2222222 上。
404 Not Found(找不到页面)
403 Forbidden(表示拒绝访问)
405 Method Not Allowed(表示方法不被允许)
500 Internal Server Error(服务器内部错误)
下面为状态码的小结:
如果需要更多的状态码可以从下面网站阅读: