1.HTTP 是什么?
HTTP (全称为 "超⽂本传输协议") 是⼀种应⽤⾮常⼴泛的应⽤层协议.
HTTP 诞⽣与
1991
年. ⽬前已经发展为最主流使⽤的⼀种应⽤层协议,我们平时打开⼀个⽹站, 就
是通过 HTTP 协议来传输数据的。
当我们在浏览器中输⼊⼀个 搜狗搜索的 "⽹址" (URL) 时, 浏览器就给搜狗的服务器发送了⼀个 HTTP 请
求, 搜狗的服务器返回了⼀个 HTTP 响应。
这个响应结果被浏览器解析之后, 就展示成我们看到的⻚⾯内容. (这个过程中浏览器可能会给服务器发送
多个 HTTP 请求, 服务器会对应返回多个响应, 这些响应⾥就包含了⻚⾯ HTML, CSS, JavaScript, 图⽚,
字体等信息)。
2.HTTP ⼯作过程
当我们在浏览器中输⼊⼀个 "⽹址", 此时浏览器就会给对应的服务器发送⼀个 HTTP 请求. 对⽅服
务器收到这个请求之后, 经过计算处理, 就会返回⼀个 HTTP 响应.
2.1 HTTP 协议格式
HTTP 是⼀个⽂本格式的协议. 可以通过 Chrome 开发者⼯具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节.
HTTP 请求:
●
⾸⾏: [⽅法] + [url] + [版本]
●
Header: 请求的属性, 冒号分割的键值对;每组属性之间使⽤\n分隔;遇到空⾏表示Header部分结束
●
Body: 空⾏后⾯的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有⼀个
Content-Length属性来标识Body的⻓度;
HTTP 响应:
●
⾸⾏: [版本号] + [状态码] + [状态码解释]
●
Header: 请求的属性, 冒号分割的键值对;每组属性之间使⽤\n分隔;遇到空⾏表示Header部分结束
●
Body: 空⾏后⾯的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有⼀个
Content-Length属性来标识Body的⻓度; 如果服务器返回了⼀个html⻚⾯, 那么html⻚⾯内容就
是在body中.
3.fiddler
3.1抓包⼯具使⽤
● 左侧窗⼝显示了所有的 HTTP请求/响应, 可以选中某个请求查看详情.
● 右侧上⽅显示了 HTTP 请求的报⽂内容. (切换到 Raw 标签⻚可以看到详细的数据格式)
● 右侧下⽅显示了 HTTP 响应的报⽂内容. (切换到 Raw 标签⻚可以看到详细的数据格式)
● 请求和响应的详细数据, 可以通过右下⻆的View in Notepad 通过记事本打开.
3.2抓包⼯具原理
Fiddler 相当于⼀个 "代理".
浏览器访问 sogou.com 时, 就会把 HTTP 请求先发给 Fiddler, Fiddler 再把请求转发给 sogou 的服务器. 当 sogou 服务器返回数据时, Fiddler 拿到返回数据, 再把数据交给浏览器.
因此 Fiddler 对于浏览器和 sogou 服务器之间交互的数据细节, 都是⾮常清楚的.