这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
【HTTP协议】
Content
- HTTP协议简介
- HTTP协议的基本结构和发展历程
- 常见场景中的HTTP协议应用
- 在不同的环境中发起HTTP请求
HTTP协议简介
什么是HTTP
Hyper Text Transfer Protocol(超文本传输协议)。是一个应用层协议,基于TCP协议。请求响应,简单可扩展,无状态。
HTTP协议的基本结构和发展历程
协议分析
- HTTP0.9版本称为单行协议,响应只有HTML文档
- HTTP1.0版本增加了Header,有了状态码,支持多种文档类型
- HTTP1.1版本(标准化版本)增加了链接复用,缓存以及内容协商的内容。
- HTTP2版本,增加了使得传输更加稳定,效率更加高的版本
报文分析:
| METHOD | |
|---|---|
| GET | 请求一个指定资源的表示形式,使用GET的请求应该只被用于获取数据 |
| POST | 用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用 |
| PUT | 用请求有效载荷替换目标资源的所有当前表示 |
| DELETE | 删除指定资源 |
| HEAD | 请求一个与GET请求的响应相同的响应,但没有响应体 |
| CONNECT | 建立一个到由目标资源标识的服务器的隧道 |
| OPTIONS | 用于描述目标资源的通信选项 |
| TRACE | 沿着目标资源的路径执行一个消息环回测试 |
| PATCH | 用于对资源应用部分修改 |
有些请求是安全的,即不会修改服务器的数据的方法,如GET,HEAD,OPTIONS等; 有些请求是幂等的,即同样的请求被执行一次和执行多次的效果是相等的,服务器的状态也是相等的,所有安全的方法都是幂等的。
状态码
在状态码的设置中,均是使用三位数字来表示。
- 200 OK -客户端请求成功
- 301 -资源网页等被永久转移到其他的URL
- 302 -临时跳转
- 401 -未经授权访问
- 404 -请求资源不存在,可能是输入了错误的URL
- 500 -服务器内部发生了不可预期的错误
- 504 -网关或者代理的服务器无法在规定的时间内得到想要的响应
RESTful API
一种API的设计风格
- 每一个URI都代表一种资源
- 客户端和服务器之间,传递这种资源的某种表现层
- 客户端通过HTTP method,对服务器端资源进行操作,实现表示层状态转化
缓存
- 强缓存
- 本地有一份缓存,是否可以使用需要和服务端进行验证
- 有Expires协议来规定时间,Cache-Control来规定可缓存性、到期、重新验证或重新加载
- 协商缓存
- 本地有缓存直接使用
- Etag来规定资源的特定版本的标识符,类似于指纹
- Last-Modified来编写最后修改时间
cookie
set-cookie-response,携带各种cookie的名称和值,cookie的有效期,限制制定的cookie的发送范围的文件目录,限制cookie生效的域名,限制javaScript脚本无法获得cookie等等键值对
HTTP/2
更快、更稳定、更简单
帧:是HTTP2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。
消息:与逻辑请求或响应消息对应的完整的一系列帧。
数据流:已建立的连接内的双向字节流,可以承载一条或多条信息。
HTTP2中的连接都是永久的,而且仅需要每个来源一个连接。
流控制:阻止发送方向接收方发送大量数据的机制。
HTTPS
经过TSL/SSL加密,在HTTPS加密中,对称加密和非对称加密混合使用。
HTTP协议的应用场景分析
静态资源方案:缓存+CDN+文件名hash
登录:跨域解决方案
- CORS
- 代理服务器
- IFrame
登录状态会记录在cookie之中
实战
发起HTTP协议
AJAX之XHR,这是浏览器内置的发起http协议的功能,需要设置传输的信息。
AJAX之Fetch,这是XHR的升级版,使用了Promise,使用模块化设计,通过数据流处理对象,支持分块读取
用户体验
- 网络优化
- 稳定性