5.3.1 通信->HTTP3超文本传输协议标准(IETF RFC 9114):HTTP(HypetText Transfer Protocol)

5.3.1 通信->HTTP3超文本传输协议标准(IETF RFC 9114):HTTP(HypetText Transfer Protocol) 一、核心特性无状态性:不保存客户端与服务器之间的交互状态每次请求是独立的——服务器不会记住上一次请求的信息通过 Cookie、Session、Token 等机制补充状态管理例如登录后服务器返回 Cookie后续请求携带 Cookie 即可识别用户无连接性http/1.0特性:1.0 规定每次请求 - 响应完成后TCP 连接就会断开频繁请求会导致大量 TCP 握手 / 断开开销1.1 引入持久连接Keep-Alive默认开启TCP连接可复用处理多个请求后再断开2 进一步通过多路复用提升连接效率明文传输:HTTP 传输的数据未加密直接以明文形式在网络中传输存在被窃听、篡改的风险HTTPSHTTP over SSL/TLS通过加密和证书验证解决此问题是目前主流的安全传输方式二、HTTP 请求 - 响应模型请求流程客户端如浏览器向服务器发送请求服务器处理后返回响应全程基于 TCP 可靠连接客户端与服务器建立 TCP 连接三次握手客户端发送 HTTP 请求报文服务器解析请求处理业务逻辑如查询数据库、读取文件服务器返回 HTTP 响应报文客户端解析响应渲染内容如浏览器展示网页基于 Keep-Alive 决定是否保持 TCP 连接请求报文结构HTTP 请求报文由请求行、请求头、空行、请求体四部分组成请求行包含请求方法、请求 URL、HTTP 版本格式请求方法 URL HTTP版本示例GET /index.html HTTP/1.1请求头键值对形式传递附加信息如客户端类型、接受的数据格式常见字段Host目标服务器域名如Host: www.example.comUser-Agent客户端标识如浏览器型号、系统版本Accept客户端可接受的响应数据类型如Accept: text/html, application/jsonCookie携带客户端状态信息Content-Type请求体的数据格式如Content-Type: application/json仅 POST/PUT 等带请求体的方法需要空行分隔请求头和请求体必须存在即使无请求体请求体仅 POST、PUT 等方法包含传递需要提交的数据如表单信息、JSON 数据响应报文结构HTTP 响应报文由状态行、响应头、空行、响应体四部分组成状态行包含HTTP 版本、状态码、状态描述格式为HTTP版本 状态码 状态描述示例HTTP/1.1 200 OK响应头键值对形式传递服务器信息和响应附加数据常见字段Server服务器软件标识如Server: Nginx/1.21Content-Type响应体的数据格式如Content-Type: text/html; charsetutf-8Content-Length响应体的字节长度Set-Cookie服务器向客户端设置 CookieCache-Control缓存控制策略如Cache-Control: max-age3600空行分隔响应头和响应体响应体服务器返回的实际数据如 HTML 页面、JSON 字符串、图片二进制数据三、常见请求方法HTTP 定义了多种请求方法用于表示对资源的操作意图核心方法如下方法作用是否带请求体幂等性主要参数位置次要 / 补充参数位置特殊说明GET获取服务器上的资源如网页、图片否参数可拼在 URL 后是多次请求结果一致URL 查询字符串?keyvalue无请求头极少用禁止放请求体URL 长度有限制明文传输敏感数据不适用POST向服务器提交数据如表单提交、创建资源是否多次提交可能产生不同结果如重复创建订单请求体BodyURL 查询字符串请求体格式由Content-Type指定JSON / 表单 / 文件等无大小硬限制PUT更新服务器上的资源全量更新是是多次更新结果一致请求体BodyURL 路径资源 ID 查询字符串URL 通常指定资源唯一标识如/users/10请求体传完整更新数据DELETE删除服务器上的资源否 / 是是URL 路径资源 ID 查询字符串请求体特殊场景规范推荐 URL 传参请求体传参需服务器支持如批量删除{ids:[10,20]}HEAD仅获取响应头不返回响应体用于检查资源状态否是URL 查询字符串?keyvalue无请求头极少用与 GET 参数规则完全一致仅返回响应头无响应体PATCH更新服务器上的资源部分更新是是请求体BodyURL 路径资源 ID 查询字符串URL 指定资源标识请求体传部分更新字段如仅改name无需传完整数据幂等性多次执行相同请求结果与执行一次的结果一致保证操作安全四、HTTP 状态码状态码是服务器返回的三位数字用于表示请求的处理结果分为 5 类1xx信息性状态码表示服务器已接收请求正在处理如100 Continue客户端可继续发送请求体用于大请求的预检2xx成功状态码表示请求成功处理如200 OK请求成功响应体返回数据201 Created资源创建成功如 POST 创建用户204 No Content请求成功但无响应体如 DELETE 删除资源3xx重定向状态码表示需要客户端进一步操作如跳转如301 Moved Permanently永久重定向如域名更换302 Found临时重定向304 Not Modified资源未修改使用客户端缓存节省带宽4xx客户端错误状态码表示请求存在错误客户端问题如400 Bad Request请求参数错误或格式非法401 Unauthorized请求需要身份验证未登录403 Forbidden服务器拒绝访问权限不足404 Not Found请求的资源不存在如访问不存在的网页405 Method Not Allowed请求方法不被允许如用 GET 请求修改资源5xx服务器错误状态码表示服务器处理请求时出错如500 Internal Server Error服务器内部未知错误如代码 bug502 Bad Gateway网关 / 代理服务器收到上游服务器的无效响应503 Service Unavailable服务器暂时不可用如过载、维护504 Gateway Timeout网关 / 代理服务器请求上游服务器超时五、HTTP 版本演进HTTP/0.91991 年最早期版本仅支持 GET 方法无请求头 / 响应头仅传输 HTML 文本功能极简HTTP/1.01996 年支持 GET、POST、HEAD 方法引入请求头、响应头支持多种数据类型图片、视频等每次请求对应一个 TCP 连接无连接性效率低HTTP/1.11999 年目前主流默认开启持久连接Keep-Alive复用 TCP 连接支持管道化请求客户端可连续发送多个请求无需等待响应引入 Host 头实现一台服务器托管多个域名虚拟主机新增 PUT、DELETE、PATCH 等方法完善资源操作支持分块传输Transfer-Encoding: chunked边生成数据边传输HTTP/22015 年多路复用一个 TCP 连接可同时处理多个请求 / 响应解决 HTTP/1.1 的队头阻塞问题二进制帧将报文拆分为二进制帧传输解析效率更高服务器推送服务器可主动向客户端推送资源如网页依赖的 CSS/JS 文件头部压缩对请求头 / 响应头进行压缩减少传输体积5. HTTP/32022 年基于 QUIC 协议UDP 之上的可靠传输协议替代 TCP解决 TCP 队头阻塞问题更快的连接建立无需三次握手优化移动端网络切换如 4G/5G 切换目前逐步普及主流 CDN 和浏览器已支持六、HTTP 与 HTTPS 的区别特性HTTPHTTPS安全性明文传输无加密基于 SSL/TLS 加密传输防窃听、篡改、伪造端口80443证书无需需要 CA 颁发的数字证书验证服务器身份性能无加密开销速度稍快加密 / 解密有开销需握手但 HTTP/2 可弥补搜索引擎无权重加成搜索引擎优先收录提升排名七、常见应用场景网页浏览浏览器通过 HTTP/HTTPS 请求网页、图片、JS/CSS 资源API 接口前后端分离项目中前端通过 HTTP 请求后端 API如 RESTful API文件下载通过 GET 请求下载文件支持断点续传物联网通信设备通过 HTTP 向服务器上报数据或接收指令HTTP 协议核心权威渠道HTTP 工作组规范汇总页官方核心入口https://httpwg.org/specs/这里整合了 HTTP/1.1、HTTP/2、HTTP/3 等各版本的权威 RFC 文档链接是获取官方规范的核心地址HTTP 工作组主页https://httpwg.org/可了解工作组动态、规范制定进度等信息RFC 官方发布平台https://www.rfc-editor.org/能检索到 HTTP 各版本对应的 RFC 文档如 HTTP/1.1 对应 RFC 9112、HTTP/2 对应 RFC 9113、HTTP/3 对应 RFC 9114补充学习渠道MDN Web Docs 的 HTTP 专题https://developer.mozilla.org/zh-CN/docs/Web/HTTP虽非官方规范但有详细的中文教程与参考适合学习理解