HTTP笔记
2023-02-19 12:20:12 时间
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 的
8.2 登录
9. 优化
相关文章
- Jgit的使用笔记
- 利用Github Action实现Tornadofx/JavaFx打包
- 叹息!GitHub Trending 即将成为历史!
- 微软软了?开源社区讨论炸锅,GitHub CEO 亲自来答
- GitHub Trending 列表频现重复项,前后端都没去重?
- Photoshop Elements 2021版本软件安装教程(mac+windows全版本都有)
- (ps全版本)Photoshop 2020的安装与破解教程(mac+windows全版本都有)
- (ps全版本)Photoshop cc2018的安装与破解教程(mac+windows全版本,包括2023
- 环境搭建:Oracle GoldenGate 大数据迁移到 Redshift/Flat file/Flume/Kafka测试流程
- 每个开发人员都要掌握的:最小 Linux 基础课
- 来撸羊毛了!Windows 环境下 Hexo 博客搭建,并部署到 GitHub Pages
- 超实用!手把手入门 MongoDB:这些坑点请一定远离
- 【GitHub日报】22-10-09 zustand、neovim、webtorrent、express 等4款App今日上新
- 【GitHub日报】22-10-10 brew、minio、vite、seaweedfs、dbeaver 等8款App今日上新
- 【GitHub日报】22-10-11 cobra、grafana、vue、ToolJet、redwood 等13款App今日上新
- Photoshop 2018 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2017 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2020 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2023 资源免费下载(mac+windows全版本都有,包括最新的2023)
- 最新版本Photoshop CC2018软件安装教程(mac+windows全版本都有,包括2023