2.1 HTTP协议用于客户端与服务器端之间的通信
就是要明确三个概念,只有客户端/服务端/通信线路存在时才会有HTTP协议的用武之地
这个可以用打电话来类比,要打一个电话,至少得有一个打电话的,一个接电话的,再就是有一条卫星线路/电话线才行.把声音置换成光波传送到另一个人的电话里,就是HTTP协议要做的事了.
2.2 通过请求与响应报文交换数据
那HTTP究竟是怎么发挥它的用武之地的呢?就是通过在客户端发送请求报文,服务器端发送响应报文来交换数据,达到通信的目的.
- 请求报文
- 请求首部
- 方法
- URI
- 协议版本
- 内容实体
- 请求首部
- 响应报文
- 响应首部
- 协议版本
- 状态码
- 状态码原因短语
- 响应主体
- 响应首部
这个用打电话来类比就是,怎么把声音传到另外一个人的耳朵里
2.3 HTTP是不保存状态的协议
使用HTTP协议,每当有新的请求发送,就会有新的响应产生.感觉这个现在看起来是好多余的说明,这不就是和1+1等于2一样正常的事么?为什么还要拿出来讲呢?不是越讲越让人糊涂吗?
用打电话来类比就是,如果你不开通来电显示功能(虽然现在都是默认开通的),你根本不知道这次是谁给你打电话的.
2.4 请求URI定位资源
- 访问一个域名
- 会在请求首部的host里面自动带上域名
- 然后在请求首部指定URI
- 如果把URI指定为*号,只是查询HTTP服务器支持哪些HTTP方法
GET /UpdateCheck.aspx?isBeta=False HTTP/1.1
Host: www.fiddler2.com
GET * HTTP/1.1
Host: www.fiddler2.com
2.5 告知服务器意图的HTTP方法
在向服务器发送请求的时候,至少要指定下面中的任何一种
- GET: 获取资源
- POST: 发送数据
- 比GET传送的数据量更大
- PUT: 传送文件
- HEAD: 获得报文首部
- 比GET更快,用于确认资源有效性和更新时间等
- DELETE: 删除文件
- OPTIONS: 查询针对请求URI可使用的方法
- TRACE: 追踪代理路径
- 这个怎么去模拟复现一下呢?
- CONNECT: 要求用隧道协议连接代理
- 同上,如何复现
2.6 持久连接节省通信量
正常情况下,每进行一次HTTP通信都要断开一次连接.即TCP握手建立连接 -> 数据通信 -> TCP挥手断开连接.这样消耗的资源大,访问速度慢.
2.6.1 持久连接
通过keep-alive或connection reuse保持TCP的链接状态,只要没有一方明确提出断开,就一直连接.
- 减少重复连接断开TCP的开销
- 加快Web页面的显示速度
- HTTP/1.1默认都是持久连接
2.6.2 管线化
实际上就是让请求的链式执行变成并发执行.这个可以通过Chrome开发者工具的Network面板观察的到
2.7 使用Cookie的状态管理
默认情况下,建立链接后,服务器根本不知道这个链接背后的客户端是谁.
- 在响应报文中设置Set-Cookie首部,通知客户端保存Cookie
- 客户端再次发起请求时,就带上之前服务端返回的那个Cookie
- 服务端收到请求后,发现就Cookie,就可识别是谁了