http不同版本之间的区别

news/2024/10/22 14:31:50/

前言:http当前有哪些版本

HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种用于传输超媒体文档的应用层协议,当前主要使用的版本有 HTTP 1.0HTTP 1.1HTTP 2

一、HTTP 1.0

这是最早的版本,采用的是短连接,它有很多的缺点。

  • 每次请求都要与服务器建立一次TCP连接,请求结束后立即断开连接。
  • 不支持请求流水线,每次只能发送一个请求。
  • 数据传输没有压缩,可能会造成网络拥堵。
  • 报文头部信息过大,HTTP 1.0 的头部格式为 ASCII 码文本格式,每次请求时都需要传输相应的头部信息。哪怕存在重复的头部信息,这些信息也会被重复传输,浪费了带宽和时间。

总结:无法高效的处理长链接,流水线化请求;请求头信息过大,容易导致网络延迟,浪费资源。

二、HTTP 1.1

这个版本针对 1.0 版本的缺点做了一些优化,主要有以下几个方面。

  • 支持持久连接,即在客户端和服务器之间的 TCP 连接上可以发送多个请求和响应,不用每次请求都重新建立连接。
  • 支持流水线化,在一个 TCP 连接上可以同时发送多个请求,不需要等待响应返回。这样可以减少延迟,提高网络吞吐量。
  • 引入了新的缓存处理机制,可以减少服务器的压力,并提高数据的传输速率。使用 Cache-ControlETag 等头部来控制缓存机制,并对缓存进行更精细的控制。
  • 引入了更严格的身份验证和密码保护方案,可以对资源进行更好的保护,防止资源被非法访问。
  • 支持多种编码格式,并允许服务器压缩数据并在客户端解压缩,从而减少数据传输的数量和时间。

1.1 版本针对 1.0 版本做了一些优化,但仍然存在很多的问题。主要有以下几点。

  • HTTP 1.1 采用的是队列式的方式进行请求响应,同一时间内只能处理一个请求,不能并发请求,这可能会导致堵塞,从而导致剩余请求无法被传送,影响速度和性能。
  • 没有减少头部信息大小,依然存在 1.0 版本的问题。
  • 依赖于 TCP 连接,可能会有拥塞控制、包延迟等拥塞控制、包延迟等问题。
  • HTTP 1.1 下的 cookiesSSL 等安全机制并不完美,会面临信息泄露、身份伪造和跨站点脚本等问题,从而威胁到网络安全。

三、HTTP 2

这个版本是 2015 年发布的,也是现在应用最广泛的版本。它相对于 1.1 版本,进一步进行了优化。

  • 多路复用:HTTP 2.0 可以同时传输多个请求和响应,而不需要像 HTTP 1.x 版本那样需要建立多条 TCP 连接。
  • 二进制分帧:将消息分为更小的帧,每个帧都包含帧头信息,这些帧进行无序传输而且并行处理,帧之间互不影响,同时用二进制编码降低了出错率。
  • 首部压缩:在 HTTP 2.0 中,客户端和服务器可以维护一个静态表和动态表,用来存储之前发送的 HTTP 首部。这些首部可以被压缩,从而在网络上传输更快。
  • 服务器推送:HTTP 2.0 允许服务器提前向客户端推送数据,客户端在没有明确请求时就会收到来自服务器的资源,加快了网页的加载速度。

HTTP 2 已经足够优秀,但依然存在一些不足,不过这些不足只能说是以后的升级优化方向,并不是致命缺点。

  • 需要新的服务器和客户端支持:对于老版本的浏览器和服务器,需要额外的配置和插件才能兼容。
  • 使用开销较大:由于首部压缩使用的算法复杂,需要更高的计算机资源。
  • 不支持无状态连接:HTTP 2.0 通过多路复用来提升性能,但这也带来了一个问题,即相比 HTTP 1.xHTTP 2.0 的连接更为耗费资源,无法像 HTTP 1.x 一样保持为无状态连接。
  • Head-of-line blocking:在 HTTP 2.0 中,多个请求共享一条TCP连接,但在 HTTP 2.0 中,响应需要按照请求的顺序返回,对于某个没有返回的请求,会阻塞当前连接的其他请求,这种现象称作 Head-of-line blocking

END


http://www.ppmy.cn/news/93135.html

相关文章

JetBrains的Python集成开发环境Pycharm 2023版本在Linux系统的下载与安装配置教程

目录 前言一、PyCharm安装二、使用配置总结 前言 PyCharm是一款专为Python语言开发人员设计的集成开发环境(IDE)。它提供了丰富的功能和工具,可以帮助开发人员更高效地编写、调试和部署Python应用程序。注:已在CentOS7.9和Ubuntu…

rollup打包react组件

这次主要简单实现用rollup打包react组件,组件的话简单写了一个弹窗组件,效果如下: 点击打开弹框,点击关闭按钮关闭弹框 首先创建react项目,这边还是用mfex-project脚手架创建 mfex-project create react-demo 然后编…

Go 中的随机性测试

👇我在这儿 这是关于 Go 语言模糊测试的四部分教程系列的第一部分: 1、Go 语言中的随机测试 2、Go 语言中的模糊测试 3、写一个 Go 语言的模糊测试目标(即将推出) 4、通过模糊化发现漏洞(即将推出) 为我们的 Go 程序选择好的测试用例有点看运气。有时我们很幸运找到…

不同的去耦电容 阻抗VS频率

不同的去耦电容 阻抗VS频率 • 并联电容可以在一个较宽的频带内降低阻抗 • 小的去耦电容尽可能靠近电源引脚 为什么每个电源引脚都需要去耦 去耦电容总结 • 旁路电容离电容引脚尽可能的近 • SMT磁珠对于降低Ripple非常有效 • 高频时需要地平面 – 最小化寄生参数 • 使用…

LeetCode 1143 最长公共子序列

题目: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&am…

JavaEE——阻塞式队列

文章目录 一、阻塞式队列二、生产者消费者模型1.发送方和接受方之间的 “解耦合”2. “削峰填谷”保证系统稳定性3、代码实现阻塞式队列 一、阻塞式队列 阻塞式队列,顾名思义也是一个队列,这个队列遵循的是先进先出的原则。 这里简单提一个特殊的队列&…

什么是智能合约存储布局?

本指南将解释智能合约中存储的数据。合约存储布局是指控制合约存储变量在长期内存中排布的规则。 读者先决条件知识 以下一般先决条件有助于理解本文: 熟悉面向对象的语言 位和字节 十六进制 智能合约 以太坊虚拟机(EVM) 哈希 无符号整数 静态…

【python之django1.11框架一】django环境搭建及基本操作

1. 环境准备 开发环境:windows 11先安装好miniconda3。镜像地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 选择windows 64位下载。 下载地址: https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-lates…