首页 > 其他分享 >HTTP与HTTPS

HTTP与HTTPS

时间:2024-07-09 14:58:07浏览次数:15  
标签:HTTP 请求 报文 TCP 传输 HTTPS 连接

一、HTTP的概念
HTTP是超文本传输协议,是一种应用层协议,是基于为浏览器/服务器间提供统一的信息交换格式而出现的,其发展历程为HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3。

1. HTTP版本区别
HTTP/1.0:HTTP/1.0为短连接,即客户端单次请求后就关闭TCP连接。这样效率显然是很低的
HTTP/1.1:HTTP/1.1默认为长连接,提升了连接的利用率,可用报文中Connecton字段控制的,取值Keep-Alive 为长连接(默认),取值Close 表示关闭长连接。并且引入了管道化技术,发送请求后不必等待响应就可以继续发送下一个请求,但是由于性能原因很少被支持。
HTTP/2:HTTP/1为半双工,只能由客户端向服务端发送请求,服务端再响应请求。并且HTTP/1.1存在应用层队头阻塞和报文头部信息重复传输的问题。HTTP/2引入了全双工,服务端也可主动发送数据。并且HTTP/2通过将报文分帧传输的方式,实现了连接的多路复用,解决了应用层面的队头阻塞问题。此外,HTTP/2通过HPACK算法对HTTP报文头部进行了压缩,提升了传输效率
HTTP/3:在HTTP/3之前,HTTP都是基于TCP传输的。HTTP/3基于UDP传输


2. HTTP2 vs HTTP1.1
HTTP1.1存在的问题,HTTP1.1引入了长连接,但仍存在一些问题:

应用层队头阻塞:在一条连接中,客户端必须等待获取完一个请求的全部响应报文才能获取下一个请求的响应报文。如果说前一个请求需要的响应时间特别久比如说是一个大文件,后面的请求响应只能被阻塞。
报文头部信息重复传输:由于HTTP本身是无状态协议,每次请求响应都需要带上全部的头部信息,并且这些头部信息中很多都是重复不变的,比如UserAgent,或者每个字段的名称。这些头部信息的重复传输就造成了资源的浪费。
半双工:不支持服务器推送消息, 因此当客户端需要获取通知时,只能通过定时器不断地拉取消息,这无疑浪费大量了带宽和服务器资源。
为了应对这些问题常见的优化方案如下:

减少请求数量:将请求的资源文件内联合并为一个请求响应。
增加连接个数:可以开多个TCP连接去分别进行请求,但是浏览器对一个域名的并发TCP连接数限制为6个,因此还有一些解决方案就是不同资源类型放到不同的二级域名下面,比如像图片这种消耗比较大的资源单独放到一个域名下,这样就可以增加并发的TCP连接数。但是大量的TCP连接的创建与销毁肯定是存在性能问题的,单个TCP连接的利用率还是没有提上去。前面提到的两个问题还是没有完全解决。

HTTP2做了如下改进:

报文分帧传输:在应用层将一个报文视为一个stream流,将报文拆分为多个有序的帧,每个帧的stream流id相同,帧id不同。那么在接收方就可以通过流id区分一个报文,并通过帧id将报文按序组装起来。因此在一个连接中就可以同时传输多个请求或者响应,就是多个报文的帧混合传输,接收端根据id在应用层进行组装,这样实现了连接的多路复用,有效提升了TCP连接的利用率。
报文头部压缩算法:使用HPACK算法对报文头部进行压缩。使用静态表存储常见的HTTP字段和值,用动态表存储请求过程中动态的字段和值,并且使用哈夫曼编码压缩字符串值。那么在传输过程中只需要用对应的表索引来替代实际的值,这样就大大减少了报文头部的大小。
支持全双工:服务器支持主动推送资源,大大提升了消息的传输性能,服务器推送资源时,会先发送 PUSH_PROMISE 帧,告诉客户端接下来在哪个 Stream 发送资源,然后用偶数号 Stream 发送资源给客户端。


参考:

https://www.bilibili.com/video/BV1vv4y1U77y
https://www.bilibili.com/video/BV1Jz4y1B7st
https://zhuanlan.zhihu.com/p/330300133
2. HTTP3 vs HTTP2
HTTP2是基于TCP进行传输的,但是基于TCP具有以下局限性:

TCP队头阻塞:TCP要保证数据包按序到达给到应用层,因此可能会出现一个报文stream的帧都到达了,要是等待前面丢失的重传,没办法给到应用层读取。
连接握手延迟与连接迁移: HTTPS 请求前需要经过 TCP 三次握手和 TLS 四次握手(TLS 1.2)建立连接,并且用户IP地址变动时又要重新建立连接,比如手机在4G网络和WiFi之间切换时。
慢启动:发送速率先要有个慢启动的过程。
HTTP3基于QUIC协议,其传输层为UDP:

无队头阻塞:UDP不关心数据包顺序,一个报文的帧都到达后由QUIC协议组装给应用层,丢失了由QUIC协议控制重传。
更快的连接握手与连接迁移:QUIC 协议握手,这个握手过程只需要 1 RTT,握手的目的是为确认双方的「连接 ID」。QUIC 协议的通信双方连接关系就是基于这个连接 ID确定的,而不是IP端口四元组,因此在用户网络发生变化时仍然可以基于连接 ID 继续通信,无需重新建立连接。
二、HTTP报文格式
作为一种应用层协议,其规定的信息交换格式如下:

1. 请求报文
请求报文为主动发送一个http请求的报文,格式说明:

请求行(request line):包括请求方法,资源的URL,以及HTTP协议版本。
请求头(header):包括请求服务器所需要的附加信息。
空行(CRLF):请求头部后面必须是空行,即使请求数据为空,也要有空行。
请求数据(body):也称为请求体,可以添加任意类型的数据,通过请求头中的Content-Length字段确定请求数据的长度。

标签:HTTP,请求,报文,TCP,传输,HTTPS,连接
From: https://blog.csdn.net/tyurtyuu/article/details/140296186

相关文章

  • Linux系统运维命令:查看http的并发请求数及其TCP连接状态(使用netstat结合awk和sort,组合
    一、需求二、解决方法(一)解决思路(二)命令三、实例演示和命令解释(一)实例演示(二)命令解释四、扩展一、需求用户访问一个视频监控平台的web服务特别频繁,据客户说,有大概2000个用户,要随机访问这个视频监控平台,这样对带宽的要求非常大。因此,他们需要查看到底有多少个http的并......
  • HTTP协议30 丨 2特性概览
    刚结束的“安全篇”里的HTTPS,通过引入SSL/TLS在安全上达到了“极致”,但在性能提升方面却是乏善可陈,只优化了握手加密的环节,对于整体的数据传输没有提出更好的改进方案,还只能依赖于“长连接”这种“落后”的技术(参见第17讲)。所以,在HTTPS逐渐成熟之后,HTTP就向着性能方面......
  • HTTP协议29 丨 我应该迁移到HTTPS吗?
    今天是“安全篇”的最后一讲,我们已经学完了HTTPS、TLS相关的大部分知识。不过,或许你心里还会有一些困惑:“HTTPS这么复杂,我是否应该迁移到HTTPS呢?它能带来哪些好处呢?具体又应该怎么实施迁移呢?”这些问题不单是你,也是其他很多人,还有当初的我的真实想法,所以今天我就来跟你......
  • HTTP协议28 丨 连接太慢该怎么办:HTTPS的优化
    你可能或多或少听别人说过,“HTTPS的连接很慢”。那么“慢”的原因是什么呢?通过前两讲的学习,你可以看到,HTTPS连接大致上可以划分为两个部分,第一个是建立连接时的非对称加密握手,第二个是握手后的对称加密报文传输。由于目前流行的AES、ChaCha20性能都很好,还有硬件优化,报文......
  • HTTP协议27丨更好更快的握手:TLS1.3特性解析
    上一讲中我讲了TLS1.2的握手过程,你是不是已经完全掌握了呢?不过TLS1.2已经是10年前(2008年)的“老”协议了,虽然历经考验,但毕竟“岁月不饶人”,在安全、性能等方面已经跟不上如今的互联网了。于是经过四年、近30个草案的反复打磨,TLS1.3终于在去年(2018年)“粉墨登场”,再......
  • 保姆级阿里云接入http接口加密数据教程,一看就会!大厂经验分享,接口数据落表
    前言:有关接口数据的接入,源端会给予我们一份接口说明文件,接着我们需依据对方提供的接口文档进行代码编写,以实现数据落表。接入步骤大致可分为以下几步:1.依据对方提供的接口文档,明确接口地址、请求方式、传参信息以及参数格式等。2.借助编写代码,获取接口数据内容。3.按照......
  • 【DevOps】运维过程中经常遇到的Http错误码问题分析(一)
    一、解决HTTP408错误:上传3M文件时请求超时的问题在开发Web应用程序时,遇到HTTP408状态码(请求超时)是常见的问题。特别是在上传大文件时,这种情况更容易发生。本文将探讨在上传一个3M文件时,Web服务器返回408错误的原因,并提供详细的解决方案。1.理解HTTP408状态码HTTP408状......
  • Http请求头有哪些?作用是什么?
    HTTP请求头包含以下部分1.通用头(GeneralHeaders):这部分头信息既可以用在请求,也可以用在响应是作为一个整体而不是特定资源与事务相关联。2.请求头(RequestHeaders):这部分头信息允许客户端传递关于自身的信息和希望的响应形式3.响应头(ResponseHeaders):这部分头......
  • node.js_HTTP协议
    HypertextTransferProtocol  超文本传输协议1.HTTP报文 请求行 请求头请求体 它的内容形式很灵活,可以设置任意内容  2.HTTP响应报文响应状态码响应状态的描述遇到陌生的状态码可以参考一下这个网址:https://developer.mozilla.org/zh-CN/docs/Web/HT......
  • Open-TeleVision:增强机器人学习的沉浸式遥开源操作系统 (https://robot-tv.github.io/
      每周跟踪AI热点新闻动向和震撼发展想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行!订阅:https://......