这是我参与 [第五届青训营] 笔记创作活动的第五天。
初识HTTP
HTTP协议是属于应用层的基于TCP的协议,是一种超文本传输协议。有请求和响应报文,协议简单可以扩展,是一种无状态的协议,使用cookie来跟踪用户状态和存储信息。
协议分析
Method字段:
| GET | 请求一个指定资源的表示形式。使用GET的请求应该只被用于获取数据。 |
|---|---|
| POST | 用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用 |
| PUT | 用请求有效载荷替换目标资源的所有当前表示 |
| DELETE | 删除指定的资源 |
| HEAD | 请求一个与GET请求的响应相同的响应,但没有响应体 |
| CONNECT | 建立一个到由目标资源表示的服务器的隧道 |
| OPTIONS | 用于描述目标资源的通信选项 |
| TRACE | 沿着到目标资源的路径执行一个消息换回测试 |
| PATCH | 用于对资源应用部分修改 |
safe(安全的):不修改服务器的数据的方法。(GET HEAD OPTIONS)
Idempotent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的所有safe的方法都是Idempotent的。(GET HEAD OPTIONS PUT DELETE)
状态码:
- 1XX:指示信息,表示请求已接收,继续处理
- 2XX:成功,表示请求已被成功接收、理解、接受
- 3XX:重定向,要完成请求必须进行更进一步的操作
- 4XX:客户端错误,请求有语法错误或请求无法实现
- 5XX:服务器错误,服务器未能实现合法的请求
RESTful API:一种API设计风格;
- 每一个URI代表一种资源
- 客户端与服务器之间,传递这种资源的某种表现层
- 客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化“
常用请求头:
常用响应头:
缓存:分为强缓存和协商缓存
强缓存:
- Expires,时间戳
Cache-Control
- 可缓存性:no-cache:协商缓存验证;no-store:不使用任何缓存
- 到期:max-age:单位是秒,存储的最大周期,相对于请求的时间
- 重新验证* 重新加载:must-revalidate:一旦资源国企,在成功向原始服务器验证之前,不能使用
协商缓存:
-
Etag/If-None-Match:资源的特定版本的标识符,类似于指纹
-
Last-Modified/If-Modified-Since:最后修改时间
流程图:
cookie:
Set-Cookie-response字段中的信息:
| Name=value | 各种cookie的名称和值 |
|---|---|
| Expires=Date | Cookie的有效期,缺省时Cookie仅在浏览器关闭之前有效 |
| Path=Path | 限制指定Cookie的发送范围的文件目录,默认为当前 |
| Domain=domain | 限制cookie生效的域名,默认为创建cookie的服务域名 |
| secure | 仅在HTTPS安全连接时,才可以发送Cookie |
| HttpOnly | JavaScript脚本无法获得Cookie |
| SameSite=[None、Strict、Lax] | None同站、跨站请求都可以发送;Strict仅在同站发送;允许与顶级导航一起发送,并将与第三方网站发起的GET请求一起发送 |
HTTP/2概述:更快、更稳定、更简单
- 帧:HTTP/2 通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流
- 二进制
- 消息:与逻辑请求或响应消息对应的完整的一系列帧
- 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息
- 交错发送,接收方重组织
- 连接都是永久的,而且仅需要每个来源一个连接
- 流控制:阻止发送方向接收方发送大量数据的机制
- 服务器推送
场景分析
静态资源方案:缓存 + CDN + 文件名hash