HTTP 0.9 HTTP 1.0 HTTP 1.1 HTTP 2.0区别

简介: 消息:是指逻辑上的 HTTP 消息,比如请求、响应等,由一或多个帧组成。流:流是连接中的一个虚拟信道,可以承载双向的消息;每个流都有一个唯一的整数标识符(1、2 … N);

HTTP协议 :Hyper Text Transfer Protocol(超文本传输协议),是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

HTTP/0.9#
HTTP/0.9是第一个版本的HTTP协议,已过时。它的组成极其简单,只允许客户端发送GET这一种请求,且不支持请求头。由于没有协议头,造成了HTTP/0.9协议只支持一种内容,即纯文本。不过网页仍然支持用HTML语言格式化,同时无法插入图片。

HTTP/0.9具有典型的无状态性,每个事务独立进行处理,事务结束时就释放这个连接。由此可见,HTTP协议的无状态特点在其第一个版本0.9中已经成型。一次HTTP/0.9的传输首先要建立一个由客户端到Web服务器的TCP连接,由客户端发起一个请求,然后由Web服务器返回页面内容,然后连接会关闭。如果请求的页面不存在,也不会返回任何错误码。

HTTP/1.0#
HTTP协议的第二个版本,第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用。相对于HTTP/0.9增加了如下主要特性:

请求与响应支持头域
响应对象以一个响应状态行开始
响应对象不只限于超文本
开始支持客户端通过POST方法向Web服务器提交数据,支持GET、HEAD、POST方法
支持长连接(但默认还是使用短连接),缓存机制,以及身份认证
HTTP/1.1#
HTTP协议的第三个版本是HTTP/1.1,是目前使用最广泛的协议版本。HTTP/1.1是目前主流的HTTP协议版本,相对于HTTP/1.0新增了以下内容:

默认为长连接

HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection:keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

提供了范围请求功能(宽带优化)

HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。这是支持文件断点续传的基础。

提供了虚拟主机的功能(HOST域)

在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

多了一些缓存处理字段

HTTP/1.1在1.0的基础上加入了一些cache的新特性,引入了实体标签,一般被称为e-tags,新增更为强大的Cache-Control头。

错误通知的管理

在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

HTTP/2.0#
HTTP协议的第四个版本是HTTP/2.0,相对于HTTP/1.1新增了以下内容:

二进制分帧

HTTP 2.0 的所有帧都采用二进制编码

帧:客户端与服务器通过交换帧来通信,帧是基于这个邀请码新协议通信的最小单位。
消息:是指逻辑上的 HTTP 消息,比如请求、响应等,由一或多个帧组成。
流:流是连接中的一个虚拟信道,可以承载双向的消息;每个流都有一个唯一的整数标识符(1、2 … N);
多路复用

多路复用允许同时通过单一的HTTP/2.0 连接发起多重的请求-响应消息。有了新的分帧机制后,HTTP/2.0不再依赖多个TCP 连接去处理更多并发的请求。每个数据流都拆分成很多互不依赖的帧,而这些帧可以交错(乱序发送),还可以分优先级。最后再在另一端根据每个帧首部的流标识符把它们重新组合起来。HTTP 2.0 连接都是持久化的,而且客户端与服务器之间也只需要一个连接(每个域名一个连接)即可。

头部压缩

HTTP/1.1 的首部带有大量信息,而且每次都要重复发送。HTTP/2.0 要求通讯双方各自缓存一份首部字段表,从而避免了重复传输。

请求优先级

浏览器可以在发现资源时立即分派请求,指定每个流的优先级,让服务器决定最优的响应次序。这样请求就不必排队了,既节省了时间,也最大限度地利用了每个连接。

服务端推送

服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。正因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式可以极大地提升速度。

相关文章
|
3月前
|
安全 Java 程序员
python进程、线程、协程
multiprocessing是python的多进程管理包,和threading.Thread类似。
224 4
|
3月前
|
网络协议 Shell 网络安全
PHP使用CURL详解
** @desc 封装 curl 的调用接口,post的请求方式
262 3
|
3月前
|
人工智能 程序员 C语言
Python 与 C++、C 语言的区别及选择指南
C 语言:语法相对复杂,变量需要显式声明数据类型,代码块用大括号表示。例如:
599 3
|
3月前
|
人工智能
HappyHorse 1.0 系列模型使用指南
HappyHorse 1.0 是一款基于原生多模态架构的新一代 AI 视频生成模型,支持音视频协同生成;产品深度适配广告营销、电商展示、短剧制作与社交媒体创意等内容生产场景。
|
2月前
|
存储 监控 安全
透明加解密与终端操作日志审计的数据防泄露实战—金纬软件
2025年初,某半导体企业因终端防护缺失,遭离职工程师窃取200GB芯片设计数据,损失超3亿元。本文剖析60%泄露源于内部威胁的现状,详解驱动级透明加密(AES-256)与全维度终端操作审计技术,实现“事前可管、事中可控、事后可查”的数据防泄露体系。
|
1月前
|
开发者 iOS开发
ios开发证书创建详细指引
本文详解UniApp iOS云打包必备的私钥证书(.p12)与Profile描述文件全流程:从注册苹果开发者账号(含邓白氏码)、生成CSR、创建iOS Distribution证书,到导出P12、配置AppID、添加设备UDID,再到生成App Store或Ad Hoc类型Profile,步骤清晰、避坑实用。
|
1月前
|
存储 缓存 API
《Python实现OpenClaw核心功能的完整指南》
本文跳出官方预编译包与插件市场的常规认知,提出用Python原生脚本从零构建OpenClaw的完整技术路径。文章拆解了OpenClaw事件驱动状态机的核心运行逻辑,详细阐述消息总线、输入监听、推理决策、纯文本记忆、任务执行与动态技能加载等核心模块的实现思路,同时分享多代理协作、系统性能优化、日志调试与跨平台部署的实战经验。该方案彻底摆脱官方架构束缚,实现对智能体全链路的完全可控,兼具轻量高效与极强扩展性,为开发者深入理解OpenClaw底层、打造专属定制化智能体提供了可直接复用的实践指南。
193 0
|
6月前
|
数据采集 监控 API
【量化基础】数据驱动决策:从零接入StockTV实时行情API
本文介绍量化交易基础,详解如何用Python对接StockTV实时行情API,获取毫秒级数据。涵盖REST与WebSocket实战代码,助你构建稳定策略,从数据获取迈向自动化交易,夯实量化基石。(238字)
|
缓存 网络协议 算法
从零开始掌握HTTP协议:全面详解1.0、1.1和2.0
大家好!我是小米,今天带大家深入探讨互联网基础——HTTP协议。从HTTP/1.0到HTTP/1.1,再到HTTP/2.0,它们是如何发展的,解决了哪些问题,有哪些显着区别?通过这这篇文章,你将全面了解这些协议的变革和优化,掌握关键技术点,提升开发效率。快来一起学习吧!
1036 1
|
Dubbo Java 应用服务中间件
SpringBoot——SpringBoot集成Dubbo
SpringBoot——SpringBoot集成Dubbo
1855 0
SpringBoot——SpringBoot集成Dubbo