HTTP笔记
参加字节跳动的青训营时写的笔记。这部分是杨超男老师讲的课。
个人博客(欢迎光临):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:最后修改时间
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8FWKZyKn-1644393726054)(https://s2.loli.net/2022/01/26/O6QhbtIAUyZGSgF.png)]
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的