http
http
请求方法
- GET
- POST
- OPTIONS。可以获取服务器支持的请求方法列表,或者跨域预检
- HEAD
- DELETE
- PUT
- ......
状态码
1xx ℹ️,2xx ✅,3xx ↪️,4xx ❌,5xx ⚠️
- 101 Switching Protocols:服务器同意切换协议(如 HTTP 升级为 WebSocket)
- 2xx
- 200 OK 请求成功,服务器返回目标资源
- 201 Created 请求成功且新资源已创建(常见于 POST 请求)
- 204 No Content 请求成功,但响应无返回内容(常用于 DELETE 或更新操作)
- 206 Partial Content 服务器成功处理了部分范围请求(如大文件分块下载)
- 3xx
- 301。资源永久移至新 URL,后续请求应使用新地址
- 302。资源临时移至新 URL,客户端应保留原地址。不缓存,容易被网络劫持,参考 https://cloud.tencent.com/developer/article/1906630
- 304。协商缓存相关,参考 https://github.com/GitHubJackson/afresh.js/issues/24
- 4xx
- 401 Unauthorized 需身份认证(如未登录或 token 失效)
- 403 Forbidden 服务器理解请求,但拒绝执行(权限不足)
- 404 Not Found 资源不存在(路径错误或资源已删除)
- 5xx
- 502 Bad Gateway 网关/代理服务器从上游收到无效响应(如后端服务崩溃)
更多状态码参考 https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81#3xx%E9%87%8D%E5%AE%9A%E5%90%91
标头
分为请求头和响应头,常见标头参考 https://zhuanlan.zhihu.com/p/579504784
请求头
- Accept。声明客户端可处理的响应内容类型(MIME 类型),示例:Accept: application/json, text/html(优先接收 JSON 或 HTML)
- Accept-Encoding。指定支持的压缩算法,示例:Accept-Encoding: gzip, deflate, br
- Authorization。携带身份凭证(如 Token 或 Basic Auth)
- Cookie。发送服务器设置的会话信息
- Content-Type。指定请求体的数据类型(POST/PUT 请求必需)
- Host。目标服务器的域名和端口
- User-Agent。标识客户端环境(浏览器、操作系统等)
- Referer。标记请求来源页面 URL(用于防盗链或分析)
响应头
- Content-Type。声明响应体的媒体类型和编码
- Content-Encoding。响应体的压缩格式(需客户端解压),示例:Content-Encoding: gzip
- Cache-Control。指导缓存策略,示例:Cache-Control: public, max-age=3600(公共缓存 1 小时);Cache-Control: no-store(禁用缓存)
- Set-Cookie。服务器设置客户端 Cookie。示例:Set-Cookie: sessionId=007; Path=/; HttpOnly
- Location。重定向目标 URL(配合 3xx 状态码)
- ETag。资源唯一标识符,用于协商缓存
- Access-Control-Allow-Origin。控制跨域资源共享(CORS),可以指定域名,示例:Access-Control-Allow-Origin: *(允许所有域)
- Server。服务器软件信息(如 Nginx/1.18.0)
http1.1
在 HTTP/1.1 存在 Pipelining 技术可以完成这个多个请求同时发送,但是由于浏览器默认关闭,所以可以认为这是不可行的。在 HTTP2 中由于 Multiplexing 特点的存在,多个 HTTP 请求可以在同一个 TCP 连接中并行进行。参考
http2
- 流和帧(二进制分帧)。HTTP2 性能增强的核心。参考 https://juejin.cn/post/6844903796225785870
- 多路复用。HTTP/1.1 依次加载各个资源,如果无法加载某一资源,它将阻碍其后的所有其他资源(队头阻塞)。相比之下,HTTP/2 可以使用单个 TCP 连接来一次发送多个数据流。http2 引入二进制数据帧和流的概念,将数据拆分为二进制帧(frame),通过流 ID(stream ID)标识归属,实现乱序发送与重组
- 标头压缩
- 服务器推送
http2 有哪些缺点?
参考 https://github.com/LuckyWinty/fe-weekly-questions/issues/3 和 https://juejin.cn/post/7069997103824502791#heading-5
- TCP 的队头阻塞(运输层)并没有彻底解决,TCP 为了保证可靠传输,有一个"超时重传"机制,丢失的包必须等待重传确认
- HTTP/2 通过多路复用解决应用层阻塞
- HTTP/3 基于 QUIC 协议(UDP),进一步消除 TCP 层队头阻塞
- 多路复用导致服务器压力上升,多路复用没有限制同时请求数
- TCP 以及 TCP+TLS 建立连接的延时
http3
[待补充]
https
HTTPS 是 HTTP 建立在 SSL/TLS 安全协议上的网络传输协议,通过非对称加密交换密钥+对称加密传输数据实现安全通信
- 客户端发起请求,发送支持的加密算法列表和客户端随机数(Client Random)
- 服务器从算法列表中选择一套加密组合,将公钥以及身份信息等存入数字证书,返回服务器随机数(Server Random)和证书
- 客户端验证证书,拿到服务器公钥,并且生成第三个随机数,用证书中的公钥加密后发送给服务器
- 服务器用自己的私钥进行解密,得到第三个随机数
- 客户端和服务器现在都有三个随机数了,现在根据一开始选择的加密算法来加密,生成对称密钥
- 双方利用对称密钥来加密通信(对称加密)
参考 https://lucifer.ren/fe-interview/#/topics/network/https
参考