当你在浏览器地址栏输入 www.baidu.com 并按下回车的那一刻,短短几秒钟内,你的设备就完成了一次跨越全球网络的复杂旅程。这背后,正是HTTP协议在默默支撑着我们每天的数字生活。你可能已经注意到,现代网页加载得越来越快,视频播放几乎不再卡顿,这些体验的提升,都离不开HTTP协议的持续演进。今天,就让我们一起来揭开HTTP协议的神秘面纱,从它的诞生讲起,一步步深入到它的工作原理、核心机制,再到现代安全实践与未来趋势,带你全面了解这个塑造了万维网的基石技术。
大纲

一、 Http的前世今生
1.1、使用http协议访问web

1.2、www万维网的诞生
故事要从1989年说起,一位名叫蒂姆·伯纳斯-李(Tim Berners-Lee)的科学家在欧洲核子研究中心(CERN)工作。他面临着一个普遍的科研难题:不同实验室的科学家们使用着不同的计算机系统,信息分散且难以共享。为了解决这个问题,他提出了一个革命性的构想:一个基于超文本的分布式信息系统。这个构想的核心,就是HTTP(HyperText Transfer Protocol,超文本传输协议)。
最初的HTTP协议非常简单,它的初衷纯粹是为了让科学家们能方便地共享文档。想象一下,它就像一个最基础的"文件请求-响应"系统,客户端说"请给我这个文档",服务器就返回文档内容。这个看似简单的协议,却为后来的互联网爆炸式发展埋下了种子。

1.3、万维网的构成

1.4、http发展历程

从最初的构想至今,HTTP协议经历了数次重要的迭代,每一次升级都旨在解决前一版本的瓶颈。
- HTTP/0.9 :这是最原始的版本,仅支持
GET方法,服务器返回的也仅仅是纯文本的HTML文档。它就像一个只能回答"是"或"否"的机器人,功能极其有限。 - HTTP/1.0 :为了满足更复杂的需求,HTTP/1.0引入了状态码(如200表示成功,404表示未找到)和首部字段(Headers)。首部字段就像信封上的备注,可以携带关于请求和响应的额外信息,比如内容类型(
Content-Type)。这使得HTTP能够传输图片、音频等多种内容类型,功能大大增强。 - HTTP/1.1:这是互联网历史上使用时间最长、影响最深远的版本。它引入了"持久连接"(Persistent Connection),允许在同一个TCP连接上发送多个请求和响应,避免了为每个请求都建立一次连接的开销。此外,它还支持了缓存控制、分块传输编码等特性,成为了真正支撑起现代Web的基石。
- HTTP/2:随着网页变得越来越复杂,包含大量图片、脚本和样式表,HTTP/1.1的"队头阻塞"问题日益凸显。HTTP/2应运而生,它采用了二进制分帧层,将消息分解为更小的帧(Frames),并实现了"多路复用"(Multiplexing),允许在同一个连接上并行传输多个请求和响应,极大地提升了性能。
- HTTP/3:尽管HTTP/2解决了应用层的队头阻塞,但其底层的TCP协议本身仍存在队头阻塞问题------一个数据包的丢失会导致整个连接的传输暂停。HTTP/3通过放弃TCP,转而基于全新的QUIC协议,从根本上解决了这个问题。QUIC基于UDP,内置了TLS 1.3加密,并支持0-RTT快速连接和连接迁移,为未来的互联网应用提供了更可靠、更低延迟的传输基础。
1.5、当下的http

1.6、为什么需要不断升级?
你可能会问,为什么一个协议需要如此频繁地升级?这背后是性能、安全和适应性三重驱动力的共同作用。
首先,性能瓶颈是直接推手。早期的HTTP/1.1在加载一个包含数十个资源的网页时,需要建立数十次TCP连接,耗时且低效。HTTP/2的多路复用和HTTP/3的0-RTT连接,都是为了追求极致的加载速度。
其次,安全缺陷不容忽视。HTTP/1.1及之前的版本都是明文传输,任何中间节点(如公共Wi-Fi的路由器)都可以窥探你的浏览内容。HTTPS的普及和HTTP/3内置的加密,都是为了应对日益严峻的网络安全威胁。
最后,移动网络的适应性也提出了新要求。现代用户频繁在Wi-Fi和蜂窝网络之间切换。传统的TCP连接依赖于"IP地址+端口"四元组,一旦网络切换,连接就会中断。而HTTP/3的QUIC协议使用"连接ID"来标识连接,使得网络切换时连接可以无缝迁移,极大地提升了移动体验。
二、http的一帮兄弟(与http相关的协议)
HTTP协议并非孤军奋战,它依赖于一个由多个协议组成的"朋友圈"来完成一次完整的网络通信。理解这些协议如何协同工作,是掌握HTTP的关键。
2.1、网络基础TCP/IP


2.2、IP网际协议
IP(Internet Protocol)协议位于网络层 ,负责将数据包递给对方。
任何一个参与到网络上的设备都会用到IP协议 ,为系统分配对应的IP地址。
IP协议和IP地址不是一回事,IP地址是表明网络中每个设备的标签。
IP地址需要转换成网卡的物理地址(MAC地址)才能真正完成数据通信。实际上网络中数据传输是异常复杂的,没有人能够完全跟踪整个传输过程,网络中大小网络、广域网、城域网、局域网等嵌套,需要路由才能真正传输到目的地。
IP地址目前分为 IPV4 和 IPV6两个版本。
2.3、确保可靠性的TCP协议
TCP位于传输层 ,提供可靠的字节流服务。
将大的数据分割成报文段 ,并把数据可靠的传输给对方。
为了准确无误的将数据送达,TCP采用三次握手策略。
三次握手的策略:
这个过程确保了双方都已准备好进行通信。当通信结束时,双方通过"四次挥手"来优雅地断开连接。
四次挥手策略
2.4、让IP更容易被记住的DNS协议
DNS(Domain Name System)是域名系统的英文缩写,是一种应用层协议,与 HTTP 协议类似。
它提供域名到 IP 地址的解析服务。简单来说,就是把我们输入的网址翻译成对应的 IP 地址。
- 根域名:.com、.cn、.org、.tech、.info、.me
- 二级域名:baidu.com、sina.com.cn
- 三级域名:www.baidu.com、pic.baidu.com、sports.sina.com.cn
如果是使用域名完成网络通讯,必须先从域名服务器获取域名对应的ip地址
当你输入 www.baidu.com 时,你的计算机并不知道这个域名对应哪台服务器。这时,就需要DNS(Domain Name System,域名系统)来帮忙。你可以把DNS想象成互联网的电话簿,它的作用就是将人类易记的域名(如 www.baidu.com)翻译成机器能识别的IP地址(如 110.242.68.66)。
这个过程通常涉及递归查询和迭代查询。你的设备首先会询问本地配置的DNS服务器,如果它没有缓存这个记录,它就会像一个侦探一样,从根域名服务器开始,逐级向下查询,直到找到负责 baidu.com 的权威域名服务器,最终获取到IP地址。这个看似简单的"查电话"过程,是整个网络通信的第一步。
2.5、各个协议之间的关系

2.6、HTTP协议的安全性的不足
公开
HTTP是一个公开的协议,任何人都可以随时了解协议的细节,并可以模仿、模拟、伪造HTTP请求获取服务端资源。
明文
HTTP/1.1协议本身没有加密规则,所以整个报文体都是明文在网络上流转。
网络
HTTP是为网络数据传输而生的,根本职责就是传输数据,那么网络上任何一个传输节点,包括代理、网管、路由器等,都可以随时知道HTTP传输的内容。
2.7、HTTP协议安全性的解决方法
SSL/TLS安全传输
- SSL(Secure Socket Layer)安全套接层
- TLS(Transport Layer Security)安全传输层协议
- HTTP与SSL或TLS组合使用,建立安全通路
- SSL + HTTP = HTTPS
HTTPS(HTTP Secure)超文本传输安全协议 - SSL通路与TCP一样,为了安全和完整性都牺牲一些效率。
加密报文体
- HTTP协议的报文分为:报文头、报文体
- 针对报文体的明文内容,结合密码学相关技术
- 只将报文体的内容进行加密,保证数据安全
- 这种方式需要客户端、服务端单独支持,提高了系统实现的复杂度。
- 而密钥和加密算法可以完全私有化,安全性相对较高
实际项目中,会采用两种方式结合
三、HTTP协议详解
3.1、http协议是什么?它又不是什么?

3.2、URI和URL
在互联网上,每一个资源都有一个唯一的地址。URI(Uniform Resource Identifier,统一资源标识符)是这个地址的通用概念,而URL(Uniform Resource Locator,统一资源定位符)是URI的一种,它明确指出了资源的位置和访问方法。

3.3、一个简单的http的例子

3.4、告知服务器意图的请求方法
HTTP定义了一系列请求方法,这些方法是客户端向服务器发出的指令,告诉服务器它想对资源进行什么操作。

一个重要的概念是**"幂等性"**(Idempotency)。简单来说,一个幂等的操作,无论执行一次还是多次,其结果都是一样的。例如,GET、PUT和DELETE都是幂等的,而POST通常不是,因为多次提交表单可能会创建多个订单。
3.5、http状态码
服务器在处理完请求后,会返回一个状态码,告诉客户端请求的处理结果。这些三位数的代码是服务器与客户端沟通的"暗号"。

3.6、HTTP首部
HTTP首部字段是请求和响应中携带的元数据,它们为通信提供了丰富的上下文信息。首部字段可以分为几类:通用首部、请求首部、响应首部和实体首部。

3.7、最重要的Http首部参数

3.8、理解无状态特性和身份的认证技术
HTTP首部字段是请求和响应中携带的元数据,它们为通信提供了丰富的上下文信息。首部字段可以分为几类:通用首部、请求首部、响应首部和实体首部。
无状态理解例子:
这带来了巨大的挑战:如何实现登录、购物车等功能?为了解决这个问题,我们发展出了多种会话管理技术。
Cookie
- Cookie是由服务端下发给客户端
- 客户端来保存
- 后续请求时,带着Cookie即身份信息
- 不安全、随意伪造
- 服务端无法判断Cookie内容的真伪
Session
- 客户端与服务端建立一个短暂的会话(Session)
- Session的信息存储在服务器端
- 客户端通过Cookie获得Session的ID
- SessionID应该难以被推测,并有有效时间
- Session在服务端一般是非持久化存储的,服务端负荷大
- 无法满足集群场景,Session信息不能被另外一台服务器共享
Token
- Token(令牌)是服务端经过加密计算得出的口令串
- 再次请求时,对Token进行解密,验证访问者身份
- 客户端一般存储在Local Storage,相比Cookie更安全
- 服务器不存储或者持久化存储Token,可以多服务器共享
四、HTTP协议总结
4.1 HTTP的安全短板
HTTP协议最大的安全短板就是明文传输。整个请求和响应过程,包括URL、首部、请求体,都是以明文形式在网络中流转。这使得任何中间节点,如代理、路由器、ISP,甚至同一Wi-Fi下的其他用户,都可以轻易地窃听、篡改或伪造你的数据。此外,HTTP本身没有身份验证机制,容易被伪造请求。
4.2 HTTPS:加密的守护者
HTTPS是解决HTTP安全问题的终极方案。它通过在HTTP和TCP之间加入TLS/SSL加密层,确保了数据的机密性、完整性和身份认证。
-
证书体系 :HTTPS的安全性依赖于一个公信力体系,即证书颁发机构(CA)。服务器需要向CA申请一个数字证书,该证书包含了服务器的公钥和域名等信息,并由CA的私钥进行签名。当客户端(浏览器)连接服务器时,会验证这个证书的签名是否由受信任的CA签发,域名是否匹配,以及证书是否在有效期内。这个过程确保了你连接的是真正的
www.baidu.com,而不是一个钓鱼网站。 -
HSTS机制 :为了防止攻击者将HTTPS连接降级为HTTP(SSL剥离攻击),HSTS(HTTP Strict Transport Security)机制应运而生。服务器可以通过
Strict-Transport-Security响应头,告知浏览器在未来的一段时间内(如一年),必须强制使用HTTPS来访问该网站,从而杜绝了降级攻击的可能性。
4.3 跨域资源共享(CORS)
现代Web应用常常由多个子系统构成,前端可能部署在 https://app.example.com,而后端API则部署在 https://api.example.com。由于同源策略(Same-Origin Policy)的限制,前端JavaScript默认无法直接向后端API发起请求。
CORS(Cross-Origin Resource Sharing)机制打破了这一限制。它允许服务器通过设置特定的响应头,来声明哪些外部源可以访问其资源。
- 简单请求 :对于一些安全的请求(如GET、POST with simple content-type),浏览器会自动在请求中添加
Origin头。服务器如果允许该源访问,就在响应中添加Access-Control-Allow-Origin头,值为请求的Origin或*。 - 预检请求 :对于更复杂的请求(如使用
PUT方法或携带自定义头),浏览器会先发送一个OPTIONS请求(预检请求),询问服务器是否允许该跨域请求。服务器通过返回Access-Control-Allow-Methods、Access-Control-Allow-Headers等头来授权。只有预检通过,浏览器才会发送实际的请求。

4.4 现代身份验证标准
随着应用架构的演进,身份验证和授权也变得更加复杂和标准化。
-
OAuth 2.0:这是一个授权框架,核心思想是"授权"而非"认证"。它允许第三方应用在用户授权的前提下,访问用户在资源服务器上的受保护资源,而无需获取用户的密码。例如,你使用微信登录网易云音乐,网易云音乐就是通过OAuth 2.0从微信获取一个访问令牌,来获取你的微信头像和昵称。其核心角色包括资源所有者(用户)、客户端(网易云音乐)、授权服务器(微信)和资源服务器(微信的用户信息API)。
-
OpenID Connect (OIDC) :这是建立在OAuth 2.0之上的身份认证协议。它在OAuth 2.0的基础上,增加了
id_token,这个JWT格式的令牌包含了用户的身份信息(如用户唯一ID、姓名、邮箱),从而实现了真正的"单点登录"(SSO)。
五、未来已来:HTTP/2与HTTP/3的革命
5.1 HTTP/2:性能的飞跃
HTTP/2带来的性能提升是革命性的。其核心特性包括:
- 二进制分帧层:将HTTP消息分解为更小的二进制帧,使得消息的解析和处理更加高效。
- 多路复用:多个请求和响应可以在同一个TCP连接上并行交错地传输,彻底解决了HTTP/1.1的队头阻塞问题。
- 头部压缩(HPACK):通过静态和动态表对重复的首部字段进行压缩,显著减少了首部开销。
- 服务器推送:服务器可以主动向客户端推送它预测客户端会需要的资源,进一步减少延迟。
5.2 HTTP/3:基于QUIC的全新传输层
HTTP/3的真正革命在于它放弃了TCP,转而基于QUIC协议。QUIC协议直接构建在UDP之上,并内置了TLS 1.3加密。
-
为何放弃TCP? TCP的队头阻塞和连接迁移困难是其主要痛点。QUIC通过在应用层实现可靠传输,解决了这些问题。
-
QUIC协议特性:
- 内置TLS 1.3:加密成为协议的基石,无需额外的握手。
- 0-RTT快速连接:对于曾经连接过的服务器,客户端可以在第一个数据包中就发送加密的应用数据,实现零往返时间连接,极大地提升了首屏加载速度。
- 连接ID支持迁移:连接不再依赖于IP地址,而是通过一个唯一的连接ID来标识。当你的手机从Wi-Fi切换到5G时,QUIC连接可以无缝迁移,通话或视频不会中断。
-
性能实证:根据M-Lab和Cloudflare的实测数据,在1%丢包的4G网络下,HTTP/3的页面加载速度比HTTP/2快183%。在高丢包率的卫星通信中,HTTP/3的抖动降低了76%。全球前百万网站中,已有52%启用了HTTP/3,这标志着它已成为主流。

5.3 开发者如何应对?
对于开发者而言,拥抱HTTP/3是大势所趋。
- 服务器配置:主流服务器如Nginx、Caddy和CDN服务商(Cloudflare、腾讯云等)都已提供对HTTP/3的支持。配置通常只需在监听端口时启用QUIC。
- 浏览器支持:Chrome、Firefox和Edge等主流浏览器均已默认支持HTTP/3。
- 实践建议 :建议在服务器上同时支持HTTP/2和HTTP/3,并通过
Alt-Svc头告知客户端。这样,支持HTTP/3的客户端会自动升级,而不支持的客户端则回退到HTTP/2。
总结:HTTP的过去、现在与未来
回顾HTTP协议的发展历程,我们看到的不仅是一个技术的演进,更是一场对性能、安全和用户体验的不懈追求。从最初的简单文件传输,到如今支撑起整个现代互联网的复杂生态,HTTP协议展现出了惊人的灵活性和可扩展性。
它的核心价值在于其简单、灵活的请求-响应模式,以及强大的可扩展性。每一次版本的升级,无论是HTTP/2的多路复用,还是HTTP/3的QUIC革命,都在不断突破性能的极限,为低延迟、高可靠的新一代互联网应用铺平道路。
HTTP的未来,是建立在QUIC之上的。它将不再受限于操作系统的内核,其迭代速度将远超TCP,为6G、元宇宙、自动驾驶等前沿领域提供坚实的传输基础。作为技术爱好者,我们不仅应该了解HTTP,更应该动手实践。建议你打开浏览器的开发者工具,切换到Network面板,亲自观察一次网页加载的全过程,看看那些状态码、首部字段和协议版本,是如何在你眼前演绎一场精彩的网络交响曲的。


