首页 > 其他分享 >Http不同协议的特性

Http不同协议的特性

时间:2024-09-03 11:52:57浏览次数:8  
标签:TLS 协议 HTTP 请求 TCP 特性 Http 连接

网络记录:

名称特点
Http/1.0 
  • 无状态:协议对于事务处理没有记忆功能
  • 明文传输:不安全
  • 短连接:每发起一个请求,都要新建一次 TCP 连接,增加了通信开销
  • 「请求 - 应答」的通信模式:同一个连接中,HTTP 完成一个事务(请求与响应),才能处理下一个事务。请求是串行的,每一个新请求的发出都要等待上一个请求的成功响应。——请求的队头堵塞
Http/1.1 
  • 长连接:持久连接
  • 管道(pipeline)网络传输:在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就以发第二个请求出去,可以减少整体的响应时间,解决请求的队头堵塞问题。
  • 基于请求 - 响应模型:同一个连接中,HTTP 完成一个事务(请求与响应),才能处理下一个事务。下一个请求的响应必须要等上一个请求的响应完成。————响应的队头堵塞
Http/2
  • 头部压缩: HPACK 算法建立维护头信息索引表(静态表+动态表+Huffman 编码)——解决无状态Http协议头部巨大且重复的问题
  • 二进制格式:从文本格式的各个字段值转换到二进制的数据帧(headers frame、data frame)、控制帧——提高了 HTTP 传输效率
  • 并发传输:多个Stream复用一条TCP连接。不同 Stream 的帧(携带 Stream ID 信息)是可以乱序发送的,同一 Stream 内部的帧必须是严格有序的。——解决响应的队头堵塞问题
  • 服务器主动推送资源:先发送PUSH_PROMISE 帧,告诉客户端接下来在哪个 Stream 发送资源,然后用偶数号 Stream 发送资源给客户端。
Http/3
  • 无队头堵塞:把TCP换成UDP,实现QUIC协议,QUIC 连接上的多个 Stream 之间并没有依赖,都是独立的,某个流发生丢包了,只会影响该流,其他流不受影响,只要其他流的数据报文只要被完整接收,HTTP/3 就可以读取到数据。(之前HTTP/2 是基于 TCP 协议来传输数据的,TCP 是字节流协议,TCP 层必须保证收到的字节数据是完整且连续的,这样内核才会将缓冲区里的数据返回给 HTTP 应用,那么当「前1个字节数据」没有到达时,后收到的字节数据只能存放在内核缓冲区里,只有等到这1个字节数据到达时,HTTP/2 应用层才能从内核中拿到数据,这就是 HTTP/2 队头阻塞问题。一旦丢包,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。HTTP/2 只要某个流中的数据包丢失了,其他流也会因此受影响)——解决丢包导致的TCP层队头堵塞问题
  • 更快的连接建立:Http/1和Http/2的TCP和TLS是分层的需要分批次握手,TCP 三次握手和 TLS 四次握手,共有 3-RTT 的时延。而Http/3中QUIC内部包含TLS,建立连接和密钥协商可以在1个RTT内同时实现。——解决TCP 与 TLS 的握手时延迟。
  • 连接迁移: Http/3之前,一个 TCP 连接是由四元组(源 IP 地址,源端口,目标 IP 地址,目标端口)确定的,这意味着如果 IP 地址或者端口变动了,就会导致需要 TCP 与 TLS 重新握手,这不利于移动设备切换网络的场景。QUIC 协议没有用四元组的方式来“绑定“连接,而是通过连接 ID 来标记通信的两个端点,客户端和服务器可以各自选择一组 ID 来标记自己,因此即使移动设备的网络变化后,导致IP 地址变化了,只要仍保有上下文信息(比如连接 ID、TLS 密钥等),就可以“无缝”地复用原连接,消除重连的成本。——解决连接迁移需要重新连接的问题
Https
  • 信息加密:对称/非对称混合加密——解决窃听风险
  • 校验机制:摘要算法+数字签名——解决篡改风险
  • 数字证书:CA——解决冒充风险

补充:HTTP 与 HTTPS 有哪些区别?

  • HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  • 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

参考文档:3.1 HTTP 常见面试题 | 小林coding (xiaolincoding.com)

标签:TLS,协议,HTTP,请求,TCP,特性,Http,连接
From: https://blog.csdn.net/weixin_45747274/article/details/141821710

相关文章

  • 11 Python面向对象编程:三大特性,封装、继承、多态
    本篇是Python系列教程第11篇,更多内容敬请访问我的Python合集1封装封装就是把类的公有属性改成私有属性,并且提供对外访问的方法。示例classMyClass:def__init__(self,value):self.__value=valuedefget_value(self):returnself.__......
  • 深入理解HTTP连接池及其在Java中的应用
    更多内容前往个人网站:孔乙己大叔        在现代的Web开发中,HTTP请求已经成为应用程序与外部服务交互的主要方式。随着微服务架构的流行,一个应用可能需要同时与多个外部服务进行通信,这导致HTTP请求的数量显著增加。为了提升性能和资源利用率,HTTP连接池成为了一个不可......
  • https://github.com/john-doe54548
    软件工程课程第一次作业这个作业属于哪个课程https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里https://edu.cnblogs.com/campus/fzu/SE2024/homework/13243这个作业的目标为以后软件工程的学习做准备工作学号102202156后台博文编辑页面的截图......
  • git-repo https证书认证问题
    目录问题描述解决步骤1.下载证书2.测试证书是否正常3.设置环境变量总结问题描述在使用gitrepo同步仓库时,发现不能同步,出现如下提示错误:%Total%Received%XferdAverageSpeedTimeTimeTimeCurrentDloadUploadTotalSpentLeftS......
  • 开源优雅的API交互工具 HTTPie CLI
    #HTTPie CLI:现代、用户友好的命令行HTTP客户端 - 精选真开源,释放新价值。概览HTTPie CLI 是一款专为API时代设计的命令行HTTP客户端,以其简洁明了的语法和丰富的功能集,为开发者和系统管理员提供了一种高效与HTTP服务交互的方式。它支持JSON格式的自动解析和生成,使得与RESTfu......
  • PHP 8.4 的新特性中,哪些对开发者来说最实用,最值得关注?
    随着PHP8.4版本的临近,开发者们正热切期待这一新版本的发布。PHP8.4不仅带来了一系列令人兴奋的新特性,而且这些更新在提升开发效率和代码质量方面具有重大意义。在这篇文章中,我们将探讨PHP8.4中对开发者来说最实用和最值得关注的特性。———JIT,即时编译器(JIT)的改进。JI......
  • HttpUtils——助力高效网络通信
    HttpUtils——助力高效网络通信使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可:1、创建HttpClient对象。2、创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。3、如果需要发送请求参数,可调用HttpGet、......
  • 概述HTTP1.0、1.1、2.0和3.0之间的区别
    HTTP1.0无状态、无连接:每次请求都需要建立新的TCP连接,处理完后立即关闭,导致开销较大。队头阻塞:每个请求必须按照顺序依次处理,前面的请求未完成,后面的请求只能等待,降低了并发效率。不支持持久连接:每个请求都建立一个新的TCP连接,增加了服务器的负担。HTTP1.1持久连接:引入......
  • Kettle 发送Http请求获取数据,并保存到db
    布局图 1.Generaterows:设置请求参数 2.配置第一个接口(登录)- POST  2.1.往请求head中插入数据2.2.从响应的head中读取数据  2.3.对获取的数据进行处理 3.配置第二个接口(获取数据)-GET 3.1.从响应的结果中,反序列化数据  5.保存到DB Reference:......
  • Java服务端数据库连接:连接池的高级特性
    Java服务端数据库连接:连接池的高级特性大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!数据库连接池作为Java服务端应用中的核心组件,不仅需要提供基本的连接管理功能,还需要具备一些高级特性以满足复杂的业务需求。这些高级特性包括但不限于连接池的动......