HTTP 超文本传输协议
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
协议分析
报文
以 HTTP/1.1 为例:
First Line
请求行:POST /xxx HTTP/1.1 请求方法 url 路径 协议版本
响应行:HTTP/1.1 403 Forbidden 协议版本 响应状态码 状态字段
Method
-
Safe(安全的):不会修改服务器的数据的方法。
- GET
- HEAD
- OPTIONS
-
Idempotent 幂等性:同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态是一样的。
- 所有安全的方法都是幂等的。
- GET、HEAD、OPTIONS、PUT、DELETE
状态码
-
1xx 指示信息,表示请求已接收,继续处理
-
2xx 成功,表示请求已被成功接收、理解、接受
-
3xx 重定向,要完成请求必须进行更进一步的操作
-
4xx 客户端错误,请求有语法错误或请求无法实现
- 401
Unauthorized请求未经授权
- 401
-
5xx 服务器端错误,服务器未能实现合法的请求
- 504
Gateway Timeout网关或者代理的服务器无法在规定的时间内获得想要的响应。
- 504
RESTful API
RESTful API(Representational State Transfer):一种 API 设计风格
- 每一个 URI 代表一种资源。
- 客户端和服务器之间,传递这种资源的某种表现层。
- 客户端通过 HTTP method,对服务器端资源进行操作,实现“表现层状态转化”。
常用请求头
缓存
强缓存
本地有资源直接用即可。
一些相关的响应头:
-
Expires 到期时间(时间戳)
-
Cache-Control
-
可缓存性
- no-cache:协商缓存验证
- no-store:不适用任何缓存
- public
- private
-
到期
-
max-age
- 单位为秒
- 资源的最大生存周期
-
-
重新验证 重新加载
-
must-revalidate
- 与 max-age 一起使用
- 一旦资源过期,在成功向原始服务器验证之前,不能使用
-
-
协商缓存
即使本地具有该资源的缓存,也需要向服务端进行通信,以检查资源是否过期。
- Etag / If-None-Match 资源的特定版本的标识符,类似于指纹。
- Last-Modified / If-Modified-Since 最后修改时间。
请求资源流程
-
强缓存是否可用
-
是,读取浏览器缓存
-
否,检查 协商缓存 相关信息
-
上一次响应头中是否有
ETag- 发起请求,请求头带上
If-None-Match
- 发起请求,请求头带上
-
上一次响应头中是否有
Last-Modified(时间准确性稍差)- 发起请求,请求头带上
If-Modified-Since
- 发起请求,请求头带上
-
状态为 304 Not Modified,使用浏览器缓存
-
状态为 200,将响应的最新的数据缓存协商
-