Skip to main content

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
  • 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/3https://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

用了 HTTPS 就安全了吗?HTTPS 会被抓包吗?

参考