当前位置: 首页 > news >正文

大话网络协议 - 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状态码

状态码是响应消息中,以三位数字表示的请求处理结果。

类别常用状态码技术含义应用场景
1xx101协议切换WebSocket升级
2xx200/201/204成功处理资源创建成功
3xx301/302/304重定向/缓存有效永久迁移/临时跳转
4xx400/401/404客户端错误参数错误/未授权/资源不存在
5xx500/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 的核心改进

  1. 引入版本标识(HTTP/1.0)
  2. 新增状态码(200/404等)
  3. 支持头部字段(Content-Type/Cache-Control)
  4. 扩展方法(POST/HEAD)

通信过程如:

http://www.dtcms.com/a/267797.html

相关文章:

  • 基于Excel的数据分析思维与分析方法
  • Java poi-tl 使用 word 模板 生成 word
  • 人工智能之数学基础:线性回归算法的矩阵参数求导
  • dubbo源码学习2-dubbo协议源码分析
  • C++:编译QXlsx库过程
  • 咕咚运动启动时弹出广告
  • Go语言--语法基础6--基本数据类型--切片类型
  • 【学习篇】SQL复杂查询学习
  • D3 面试题100道之(61-80)
  • React 英语单词消消乐一款专为英语学习设计的互动式记忆游戏
  • Flink ClickHouse 连接器:实现 Flink 与 ClickHouse 无缝对接
  • Scala 简介
  • 探索实现C++ STL容器适配器:优先队列priority_queue
  • 三维目标检测|Iou3D 代码解读一
  • [Qt] visual studio code 安装 Qt插件
  • AI(学习笔记第四课) 使用langchain进行AI开发 load documents(pdf)
  • excel 工作需要会的
  • C++:编译QCustomPlot源码为链接库
  • 【MoE】Buffer Overflow in Mixture of Experts
  • [netty5: WebSocketFrameEncoder WebSocketFrameDecoder]-源码解析
  • QML与C++交互之创建自定义对象
  • 使用PyTorch实现Softmax回归(Mnist手写数字识别)
  • Altium Designer使用入门(非精通)教程 第二章(原理图绘制)
  • Windows内核并发优化
  • 比较两个csv文件的内容是否一致
  • 隐马尔可夫模型(HMM):观测背后的状态解码艺术
  • [01背包]494.目标和
  • SQL128 统计2021年未完成试卷作答数大于1的有效用户
  • Mybatis-Plus使用
  • 基于大模型建设的AI智能报表系统