大话网络协议 - HTTP不同版本的演进及其区别
前言
大话网络协议这个系列,之前我们介绍过OSI七层模型和TCP/IP四层模型,也详细介绍过HTTPS协议及其实现加密通信的基本原理 【大话网络协议:HTTPS协议和HTTP协议有何不同?为什么HTTPS更安全】。而现今互联网的运行,离不开HTTP协议这个基石,但HTTP协议我们目前能看到多个不同版本,如HTTP/1.1, HTTP/2,HTTP/3等,那这些不同版本有何区别,具体应用场景如何?本篇我们就重点来聊聊HTTP协议中这些不同版本的异同。
HTTP协议简介
概述
HTTP(超文本传输协议 Hypertext Transfer Protocol)位于 OSI七层网络模型中的应用层,它的核心使命是实现分布式系统间的资源传输。它和 TCP/UDP这样的传输层协议间更多是一种协作关系。
HTTP协议,从设计之初, 就包含如下一些核心特性:
- 无状态设计:服务器不保存客户端上下文信息
- 请求/响应模型:基于标准的请求方法和状态码
- 可扩展头部:通过Header字段实现元数据传输
- 跨平台兼容:文本协议设计确保多系统互操作性
HTTP协议负责在客户端与服务器之间传输超文本资源。作为无状态协议,HTTP不保留客户端交互记录,每个请求独立处理。通过这个协议规范,统一了Web资源访问方式,可以兼容各类操作系统和设备,并可通过头部字段实现功能扩展。 是当今互联网世界的基础协议。
协议构成
HTTP通信基于请求/响应模型,通过TCP/IP协议栈传输:
请求报文结构:
如:
POST /api/v1/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer xyz123
Content-Length: 48{"name":"John","email":"john@example.com"}
响应报文结构:
如:
HTTP/1.1 201 Created
Location: /api/v1/users/789
Content-Type: application/json
Date: Mon, 15 Jul 2024 09:28:53 GMT
Content-Length: 35{"id":789,"status":"created"}
HTTP方法
HTTP方法定义了对网络资源的操作语义,可以用下表总结不同http方法的应用场景
方法 | 幂等性 | 安全性 | 应用场景 | RESTful实践案例 |
---|---|---|---|---|
GET | 是 | 是 | 获取资源 | 查询用户信息 |
POST | 否 | 否 | 创建资源/执行操作 | 新建订单 |
PUT | 是 | 否 | 全量更新资源 | 更新用户资料 |
DELETE | 是 | 否 | 删除资源 | 取消订单 |
PATCH | 否 | 否 | 部分更新资源 | 修改订单地址 |
HEAD | 是 | 是 | 获取头部元数据 | 检查资源是否存在 |
OPTIONS | 是 | 是 | 获取服务器支持的方法 | CORS预检请求 |
HTTP状态码
状态码是响应消息中,以三位数字表示的请求处理结果。
类别 | 常用状态码 | 技术含义 | 应用场景 |
---|---|---|---|
1xx | 101 | 协议切换 | WebSocket升级 |
2xx | 200/201/204 | 成功处理 | 资源创建成功 |
3xx | 301/302/304 | 重定向/缓存有效 | 永久迁移/临时跳转 |
4xx | 400/401/404 | 客户端错误 | 参数错误/未授权/资源不存在 |
5xx | 500/502/503 | 服务器错误 | 服务崩溃/网关错误/过载 |
HTTP的不同版本和演进
演进路线:
HTTP/0.9 (1991)
最初版本的 HTTP 协议并没有版本号,只是后来为了和后续版本区分,定义为了0.9版本。它基于Tim Berners-Lee博士为 CERN 内部文档传输设计的初始协议,也被称为单行协议(one-line)
这个协议极为简单:
请求:
GET /mypage.html
响应只包含页面文档本身, 也不存在消息头:
<html>这是一个非常简单的 HTML 页面
</html>
局限性也显而易见:
这个协议无法支持复杂Web应用,仅可以传输纯HTML文档,也没有状态码反映通信状态。
HTTP/1.0 (1996)
随着网络的发展,浏览器和服务器的应用快速增长,http协议也得到更多的应用。基于原协议增加了很多的特性,并在1996 整合到了标准文档 RFC 1945 中进行了标准化,并定义为了HTTP/1.0,但这个协议并非官方标准,是个狭义的标准化版本。
HTTP/1.0 的核心改进:
- 引入版本标识(HTTP/1.0)
- 新增状态码(200/404等)
- 支持头部字段(Content-Type/Cache-Control)
- 扩展方法(POST/HEAD)
通信过程如: