HTTP 笔记
参加字节跳动的青训营时写的笔记。这部分是杨超男老师讲的课。
1. 简介
- 超文本协议(Hyper Text Transfer Protocol)
特点:
- 应用层协议,基于 TCP 协议
- 请求响应:遵循客户端-服务端模型,客户端打开一个连接发出请求,然后等待服务器响应
- 简单可扩展
- 无状态
2. 发展
3. 请求方法
方法 | 解释 |
---|---|
GET | 请求一个指定资源的表示形式,用于获取数据 |
POST | 用于将实体提交到指定的资源。会导致在服务器上的状态变化或副作用 |
PUT | 对服务器的数据进行修改。与 POST 方法的区别是 POST 方法侧重于数据的增加,而 PUT 方法侧重于数据的修改 |
DELETE | 删除指定的资源 |
HEAD | 类似 GET,不过没有响应体 |
CONNECT | 建立一个由目标资源标识地服务器的隧道 |
OPTIONS | 用于描述目标资源的通信选项(比如预请求允不允许跨域请求跨域请求) |
TRACE | 沿着到目标资源的路径执行一个消息环回测试,主要用于测试 |
PATCH | 对资源应用部分修改 |
- 安全:不会修改服务器的数据的方法
- GET
- HEAD
- OPTIONS
- 幂等:同样的请求被执行一次与连续执行多次的效果一样,服务器的状态也一样。所有安全的请求方法都是幂等的。
- GET
- HEAD
- OPTIONS
- PUT
- DELETE
4. 状态码
状态码 | 解释 |
---|---|
1xx | 指示信息。表示请求已接收,继续处理 |
2xx | 成功。表示请求已被成功接收、理解、接受 |
3xx | 重定向。表示要完成请求必须进行更进一步的操作 |
4xx | 客户端错误。表示请求有语法错误或请求无法实现 |
5xx | 服务器错误。表示服务器处理请求时发生内部错误 |
5. 报文
示例:
5.1 请求报文
请求行:说明请求类型、要访问的资源以及 HTTP 版本
请求头:说明服务器要使用的信息,如 HOST 表示请求的主机名,User-Agent 表示
请求的浏览器类型等
空行:必须,即使请求数据为空,也必须要有空行。空行的作用是用来通知服务器
请求头已经结束,接下来是请求数据部分
请求数据:请求数据是在 POST 方法中使用,而不是在 GET 方法中使用,因为 GET 方法的请求数据在 URL 中。
5.2 响应报文
- 状态行:由 HTTP 协议版本号、状态码、状态消息三部分组成
- 响应头:说明客户端要使用的信息,如 Date 表示生成响应报文的日期和时间,Content-Type 表示返回的内容的内容类型以及编码类型
- 空行:必须,即使响应报文主体为空,也必须要有空行。空行的作用是用来通知客户端响应头已经结束,接下来是响应正文部分
- 响应正文:服务器返回给客户端的文本信息
5.3 常用请求头
5.4 常用响应头
5.5 缓存
- 强缓存
- Expires
- Cache-Control:可缓存性
- no-cache:协商缓存验证
- no-store:不使用任何缓存
- max-age:到期。单位是秒,存储的最大周期
- must-revalidate:重新验证、重新加载。一旦资源过期,在成功向原始服务器验证之前,不能使用
- 协商缓存
- ETag/If-None-Match:资源特定版本的标识符
- Last-Modified/If-Modified-Since:最后修改时间
5.6 Cookie
6. 发展
6.1 HTTP/2
更快、更稳定、更简单
- HTTP/2 连接都是永久的,每个来源只需一个连接
- 流控制:阻止发送方向接收方发送大量数据的机制
- 服务器推送(可选):收到 html 后,里面用到的 css、js 可以在客户端发送请求前主动推送给客户端(预判)
6.2 HTTPS
经过 TSL/SSL 加密
HTTPS:默认端口 443
HTTP:默认端口 80
7. RESTful API
8. 场景
8.1 跨域
CORS:先发送预请求,查看服务器是否允许该跨域请求
相关协议头
代理服务器:原理:同源策略是浏览器的安全策略,不是 HTTP 的