HTTP实用指南
七层模型或五层模型
七层模型
OSI七层模型:应用层,表示层,连接层,传输层,网络层,数据链路层,物理层
五层模型
TCP/IP概念模型:应用层,传输层,网络层,数据链路层,物理层
什么是HTTP
- 超文本传输协议
- 应用层协议,并基于TCP协议
- 有请求和响应
- 简单可扩展
- 无状态:每一个请求都是孤立的,不知道每一个请求之前会携带什么信息的
协议分析
HTTP/1.0
Method
- GET: 请求一个指定资源的表示形式,使用该请求最好只用于获取数据
- POST: 最好用于提交数据到指定资源,通常导致在服务器上的状态变化或者副作用
- PUT: 用请求有效载荷替换目标资源的所有当前表示
- DELETE: 删除指定的资源
- HEAD: 请求一个与GET响应相同的响应但是没有响应体
- CONNECT: 建立一个由目标资源标识的服务器的隧道
- OPTIONS: 用于描述目标资源的通信选项
- TRACE: 沿着到目标资源的路径执行一个消息环回测试
- PATCH: 用于对资源应用部分修改
安全的:GET HEAD OPTIONS 不会修改服务器的数据的方法
幂等的: GET HEAD OPTIONS PUT DELETE 同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,所有安全的方法都是幂等的
状态码
- 200:客户端请求成功
- 301:资源被永久转移到其他URL
- 302:临时跳转
- 401:请求未经授权
- 404:请求资源不存在
- 500:服务器内部发生错误
- 504:网关或者代理服务器无法在规定的时间内获得想要的响应
报文
RESTful API: 一种API设计风格
- 每一个URL代表一种资源
- 客户端和服务器之间传递这种资源的某种表现层
- 客户端通过HTTP method,对服务器端资源进行操作,实现表现层的状态转化
请求头
- Accept: 接受类型,表示浏览器支持的MIME类型
- Content-Type: 客户端发送出去实体内容的类型
- Cache-Control: 指定请求和响应遵循的缓存机制,比如’no-cache’
- If-Modified-Since: 对应服务端的Last-Modified,用于匹配看文件是否变动,只能精确到1s之内
- Expires: 缓存控制,在这个时间内不会请求,直接使用缓存,服务端时间
- Max-age: 代表资源在本地缓存多少秒,有效时间内不会请求,而是使用缓存
- If-None-Match: 对应服务端的ETag,用来匹配文件内容是否改变
- Cookie: 有Cookie并且
同域
访问的时候会自动带上 - Referer: 该页面的来源URL[CSRF拦截常用于这个字段]
- Origin: 最初的请求是从哪里发起的[精确到端口],比Referer更尊重隐私
- User-Agent: 用户客户端的一些必要信息,比如UA头部
响应头
- Content-Type: 服务端返回的实体内容的类型
- Cache-Control: 指定请求和响应遵循的缓存机制,比如’no-cache’
- Last-Modified: 请求资源的最后修改时间
- Expires: 应该在什么时候认为文档已经过期从而不再缓存它
- Max-age: 代表客户端在本地缓存多少秒,开启Cache-Control后有效
- ETag: 资源的特定版本的标识符,类似于指纹
- Set-Cookie: 设置和页面关联的cookie,服务器通过这个头部把cookie传给客户端
- Server: 服务器的一些相关信息
- Access-Control-Allow-Origin: 服务器端允许的请求Origin头部
HTTPS
HTTPS经过了TSL/SSL加密
场景分析
login
OPTIONS请求
预检:获知服务端是否允许该跨域请求[它是一种复杂请求]