news 2026/4/23 12:59:27

谈谈我对HTTP的理解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
谈谈我对HTTP的理解

HTTP(Hypertext Transfer Protocol,超文本传输协议)是互联网的核心协议之一,是应用层中用于分布式、协作式、超媒体信息系统的通信规则。它定义了客户端(如浏览器、App)与服务器之间如何交换数据(如网页、图片、API 数据),是万维网(WWW)运行的基础。

一、HTTP 的核心本质:“请求 - 响应” 的无状态协议

HTTP 的核心逻辑可以概括为:客户端主动发起请求,服务器被动响应请求,且双方不保留 “会话记忆”(无状态)。

  • 无状态:服务器不会记录客户端的历史请求信息(例如 “上一次请求了什么资源”“用户登录状态”)。这一设计让服务器更轻量(无需存储会话数据),但也带来局限 —— 需要通过 Cookie、Session、Token 等技术 “模拟” 状态(如记住用户登录状态)。
  • 请求 - 响应模式:通信必须由客户端启动(服务器不能主动向客户端发送数据),一次完整交互是 “客户端发送请求 → 服务器处理并返回响应 → 通信结束(或连接复用)”。

二、HTTP 的发展历程:从简单文本到高性能协议

HTTP 自 1989 年由蒂姆・伯纳斯 - 李提出以来,经历了多次迭代,核心是优化性能、安全性和功能扩展性

1. HTTP/0.9(1991 年,原始版本)
  • 极简设计:仅支持GET方法,用于获取纯文本资源(HTML),无请求头、响应头,数据传输完即关闭连接。
  • 示例:客户端发送GET /index.html,服务器直接返回 HTML 内容(无状态码、无元数据)。
2. HTTP/1.0(1996 年,功能扩展)
  • 核心改进
    • 引入请求头 / 响应头(如Content-Type指定数据类型,Content-Length指定长度),支持除文本外的图片、视频等多媒体资源;
    • 增加POST(提交数据)、HEAD(仅获取响应头)等方法;
    • 引入状态码(如200 OK404 Not Found),明确响应结果;
  • 缺陷:每次请求需建立新的 TCP 连接(“短连接”),频繁握手导致性能损耗;无缓存机制优化重复请求。
3. HTTP/1.1(1999 年,目前应用最广)
  • 核心改进(解决 1.0 的痛点)
    • 持久连接(Keep-Alive):默认复用 TCP 连接(一个连接可处理多个请求),减少握手次数(从 “一次请求一次连接” 变为 “多请求共享连接”);
    • 管道化(Pipelining):客户端可在收到前一个请求的响应前,发送多个请求(理论上提升效率,但因 “队头阻塞” 实际应用少);
    • 分块传输编码(Chunked Transfer):支持动态生成的内容(如直播流),无需提前知道总长度(分块传输,最后用空块结束);
    • 缓存机制:引入Cache-ControlETagLast-Modified等头部,支持本地缓存(减少重复传输);
    • 虚拟主机(Host 头部):一个服务器可通过Host头区分多个域名(如Host: example.comHost: blog.example.com),共享 IP 和端口;
  • 现状:因兼容性极佳,仍是目前互联网最主流的版本(占比超 50%),但存在 “队头阻塞”(一个请求阻塞后续所有请求)、头部冗余(重复传输大量相同头字段)等问题。
4. HTTP/2(2015 年,性能优化)
  • 核心改进(基于二进制帧的多路复用)
    • 二进制帧:将请求 / 响应拆分为二进制 “帧”(Frame),而非 HTTP/1.x 的文本格式,解析效率更高;
    • 多路复用:一个 TCP 连接中可并行传输多个 “流”(Stream),每个流对应一个请求,帧可交错传输(通过Stream ID区分),彻底解决 HTTP/1.1 的 “队头阻塞”;
    • 头部压缩(HPACK):用字典表压缩重复的请求头(如User-AgentCookie),减少传输字节;
    • 服务器推送(Server Push):服务器可主动推送关联资源(如客户端请求index.html时,主动推送style.cssscript.js),减少请求次数;
  • 局限:仍基于 TCP 传输,TCP 层的 “队头阻塞”(单个数据包丢失导致所有流阻塞)未解决,弱网环境下性能受影响。
5. HTTP/3(2022 年,基于 QUIC 的下一代)
  • 核心改进(抛弃 TCP,基于 QUIC 协议)
    • 底层协议替换:用 QUIC(基于 UDP 的可靠传输协议)替代 TCP,解决 TCP 的 “队头阻塞”(QUIC 的流独立传输,单个流丢包不影响其他流);
    • 更快的握手:整合 TLS 1.3 加密,首次握手仅需 1 RTT(TCP+TLS 需 3 RTT),复用会话可 0 RTT;
    • 连接迁移:用Connection ID标识连接,设备切换网络(如 WiFi→4G)时无需重新握手,连接不中断;
  • 现状:逐步普及中(Chrome、Cloudflare 等已支持),尤其适合弱网、移动场景(如直播、在线游戏)。

三、HTTP 的核心组成:请求、响应与元数据

一次 HTTP 通信由 “请求报文” 和 “响应报文” 组成,两者结构类似,均包含起始行、头部字段、空行、主体四部分。

1. 请求报文(客户端→服务器)
GET /api/user?id=123 HTTP/1.1 // 起始行:方法 路径 版本 Host: example.com // 头部字段:键值对,传递元数据 User-Agent: Mozilla/5.0 Accept: application/json 空行(分隔头部和主体) {"name": "test"} // 主体:请求数据(POST/PUT等方法有,GET通常无)
  • 起始行
    • 方法:定义操作类型(GET获取资源、POST提交数据、PUT更新资源、DELETE删除资源等);
    • 路径:资源的 URI(如/api/user);
    • 版本:如HTTP/1.1HTTP/2
  • 头部字段:传递附加信息(如Host指定域名、Cookie传递用户状态、Content-Type指定主体格式)。
2. 响应报文(服务器→客户端)
HTTP/1.1 200 OK // 起始行:版本 状态码 原因短语 Content-Type: application/json // 头部字段 Content-Length: 45 Cache-Control: max-age=3600 空行 {"id": 123, "name": "Alice"} // 主体:响应数据(如HTML、JSON)
  • 起始行
    • 状态码:3 位数字,表示请求处理结果(2xx成功、3xx重定向、4xx客户端错误、5xx服务器错误);
    • 常见状态码:200 OK(成功)、302 Found(临时重定向)、404 Not Found(资源不存在)、500 Internal Server Error(服务器错误)。

四、HTTP 的关键特性与扩展

  • 可扩展性:通过自定义头部(如X-Requested-With: XMLHttpRequest标识 Ajax 请求)、方法(如PATCH部分更新资源)扩展功能。
  • 缓存机制:客户端或中间代理(如 CDN)可缓存响应,减少重复请求。核心依赖Cache-Control(如max-age=3600表示缓存 1 小时)、ETag(资源唯一标识,用于验证是否更新)。
  • HTTPS:HTTP 的加密版本(HTTP + TLS),通过 TLS 握手生成会话密钥,加密传输数据,防止窃听、篡改和伪造(解决 HTTP 的明文传输安全问题)。
  • 跨域资源共享(CORS):浏览器的安全策略限制跨域请求,服务器通过Access-Control-Allow-Origin等头部允许指定域的请求(如Access-Control-Allow-Origin: https://example.com)。

五、HTTP 的应用场景

  • 网页浏览:浏览器通过 HTTP 获取 HTML、CSS、JS 等资源,渲染页面;
  • API 通信:前后端交互(如登录、数据查询),常用 JSON 作为数据格式;
  • 文件传输:下载图片、视频、文档(通过GET方法或Range头部实现断点续传);
  • 实时互动:配合 WebSocket(基于 HTTP 握手升级)实现双向通信(如聊天、直播弹幕)。

六、HTTP 的一些扩展问题(大家可以先自己看一下这些问题会不会,不会的话看下一篇文章)

  • 为啥在弱网坏境下HTTP1会比HTTP2快,原因是啥?
  • HTTP2只能有一个连接吗?
  • HTTP2的多路复用的原理是啥?
  • HTTP1为啥请求会阻塞后面的请求(对头阻塞)?

总结

HTTP 是互联网的 “语言”,它的设计从简单的文本传输逐步演进为支持高性能、高安全、低延迟的复杂协议。从 HTTP/1.1 的持久连接,到 HTTP/2 的多路复用,再到 HTTP/3 的 QUIC 底层,每一次迭代都在解决前序版本的痛点,以适应更复杂的网络场景(如移动互联网、实时互动)。理解 HTTP 的核心逻辑和演进脉络,是掌握 Web 开发、网络优化的基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:51:30

Python版本管理深度解析:从环境冲突到团队协作的最佳实践

Python版本管理深度解析:从环境冲突到团队协作的最佳实践 【免费下载链接】pyenv Simple Python version management 项目地址: https://gitcode.com/GitHub_Trending/py/pyenv 你是否曾遇到过这样的场景?😫 项目A需要Python 3.8&…

作者头像 李华
网站建设 2026/4/19 2:30:27

AI 加速新药研发:从 10 年到 2 年,成本降低 75% 的技术逻辑

一、传统新药研发的效率困局:时间与成本的双重枷锁新药研发曾是公认的 “高投入、长周期、低成功率” 行业。波士顿咨询数据显示,传统模式下一款新药从靶点发现到上市需 10-15 年,总成本超 20 亿美元,而最终成功率仅 2%-15%。这种…

作者头像 李华
网站建设 2026/4/23 12:31:40

PyTorch Geometric实战指南:7天精通图神经网络开发

想要快速掌握图神经网络开发却苦于无从下手?PyTorch Geometric(PyG)作为图神经网络领域的标杆工具库,为你提供了一条高效的学习路径。这个基于PyTorch构建的专业库,专门用于处理结构化数据的深度学习任务,让…

作者头像 李华
网站建设 2026/4/23 12:31:41

通达信主力拉高洗盘 源码

{}VAR1:REF((LOWOPENCLOSEHIGH)/4,1); VAR2:SMA(ABS(LOW-VAR1),13,1)/SMA(MAX(LOW-VAR1,0),10,1); VAR3:EMA(VAR2,10); VAR4:LLV(LOW,33); VAR5:EMA(IF(LOW<VAR4,VAR3,0),3); 主力进场:IF(VAR5>REF(VAR5,1),VAR5,0),COLORRED,NODRAW; 洗盘:IF(VAR5<REF(VAR5,1),VAR5,0…

作者头像 李华
网站建设 2026/4/23 12:31:41

Ocelot中间件扩展实战:从业务痛点到大厂架构的跨越

Ocelot中间件扩展实战&#xff1a;从业务痛点到大厂架构的跨越 【免费下载链接】Ocelot 项目地址: https://gitcode.com/gh_mirrors/oce/Ocelot 你是否遇到过这样的场景&#xff1a;业务方要求API网关支持JWT黑名单验证&#xff0c;但Ocelot默认认证中间件无法满足&…

作者头像 李华
网站建设 2026/4/23 12:31:41

堆排序详解

堆排序详解堆的简述堆排序概述堆排序的树状结构下标访问的前提准备建堆过程排序与调整过程堆排序的具体实现交换函数调整堆结构函数调用堆调整的排序主函数最后一个有子节点的父节点的下标关系小结堆的简述 堆是一种完全二叉树&#xff0c;并且满足&#xff1a; 大根堆每个节点…

作者头像 李华