前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >透视http协议

透视http协议

作者头像
虎妞先生
发布2023-10-16 18:08:39
1750
发布2023-10-16 18:08:39
举报

http协议是什么?

超文本传输协议

HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范

TCP/IP 四层模型

链接层

网络层

传输层

应用层

OSI 七层模型

物理层

数据链路层

网络层

传输层

会话层

表示层

应用层

输入网址再按下回车,后面发生了什么

  1. 浏览器从地址栏的输入,进行域名解析,因此通过浏览器缓存,系统缓存,host文件中获得服务器的 IP 地址和端口号;
  2. 浏览器用 TCP 的三次握手与服务器建立连接;
  3. 浏览器向服务器发送拼好的报文;
  4. 服务器收到报文后处理请求,同样拼好报文再发给浏览器;
  5. 浏览器解析报文,渲染输出页面。

http报文

image.png
image.png
  1. 请求行有三部分:请求方法,请求目标和版本号;
  2. 状态行也有三部分:版本号,状态码和原因字符串;

GET / HTTP/1.1

HTTP/1.1 200 OK

请求方法

安全”是指请求方法不会“破坏”服务器上的资源,即不会对服务器上的资源造成实质的修改。

只有 GET 和 HEAD 方法是“安全”的,因为它们是“只读”操作

幂等”实际上是一个数学用语,被借用到了 HTTP 协议里,意思是多次执行相同的操作,结果也都是相同的,即多次“幂”后结果“相等”。

POST 是“新增或提交数据”,多次提交数据会创建多个资源,所以不是幂等的;而 PUT 是“替换或更新数据”,多次更新一个资源

客户端和服务器看到的 URI 是不一样的。客户端看到的必须是完整的 URI,使用特定的协议去连接特定的主机,而服务器看到的只是报文请求行里被删除了协议名和主机名的 URI。

在 URI 里对“@&/”等特殊字符和汉字必须要做编码,否则服务器收到 HTTP 报文后会无法正确处理。

http的特点

  1. HTTP 是灵活可扩展的,可以任意添加头字段实现任意功能;
  2. HTTP 是可靠传输协议,基于 TCP/IP 协议“尽量”保证数据的送达;
  3. HTTP 是应用层协议,比 FTP、SSH 等更通用功能更多,能够传输任意数据;
  4. HTTP 使用了请求 - 应答模式,客户端主动发起请求,服务器被动回复请求;
  5. HTTP 本质上是无状态的,每个请求都是互相独立、毫无关联的,协议不要求客户端或服务器记录请求相关的信息。

http有哪些优点?又有哪些缺点?

  1. HTTP 最大的优点是简单、灵活和易于扩展;
  2. HTTP 拥有成熟的软硬件环境,应用的非常广泛,是互联网的基础设施;
  3. HTTP 是无状态的,可以轻松实现集群化,扩展性能,但有时也需要用 Cookie 技术来实现“有状态”;
  4. HTTP 是明文传输,数据完全肉眼可见,能够方便地研究分析,但也容易被窃听;
  5. HTTP 是不安全的,无法验证通信双方的身份,也不能判断报文是否被窜改;
  6. HTTP 的性能不算差,但不完全适应现在的互联网,还有很大的提升空间。

http传输大文件的方法

  • 数据压缩
    • gzip 只处理文本效果较好
    • 所以各大网站的服务器都会使用这个手段作为“保底”。例如,在 Nginx 里就会使用“gzip on”指令,启用对“text/html”的压缩。
  • 分块传输可以流式收发数据,
    • 节约内存和带宽,使用响应头字段“Transfer-Encoding: chunked”来表示,分块的格式是 16 进制长度头 + 数据块;
  • 范围请求可以只获取部分数据,即“分块请求”,实现视频拖拽或者断点续传,使用请求头字段“Range”和响应头字段“Content-Range”,响应状态码必须是 206;
    • 也可以一次请求多个范围,这时候响应报文的数据类型是“multipart/byteranges”,body 里的多个部分会用 boundary 字符串分隔。

https

本质

  • 在客户端和服务器之间协商出一个对称密钥,每次发送之前加密,收到之后解密,达到内容的加密传输。
  • 先用非对称加密传输对称加密的密钥,然后用对称加密传输通信的内容。

具体过程

  • 客户端告诉服务端,我要建立链接
    • 附加一串信息
      • TLS版本
      • hash加密算法套件
      • 对称加密算法
      • 非对称加密算法
  • 服务端选择 算法之后,生成一个随机数发送给 客户端
image.png
image.png
  • 服务器继续发送服务器证书,证书里有它的公钥,服务器地址 证书签名 证书机构 证书机构的签发方
image.png
image.png
  • 客户端解析证书,拿到公钥
    • 权威机构在颁布证书的时候,会对它的证书做摘要,生成指纹,再使用它的私钥对这段指纹进行加密,生成一个数字签名。当接收方收到证书后,先用证书指定的算法对证书做摘要,然后再用公钥对数字签名解密,如果和摘要的结果一致就证明是可信的。
    • 用公钥加密一个随机数Pre-master Secret ,发送服务端
  • 服务端利用自己的私钥揭秘,得到随机数,三个随机生成Master Secret, 只在握手阶段使用
  • 客户端和服务端 再根据master secret 将直接生产他们的会话密钥、
  • MAC Secret MAC Secret是用来验证身份的。你是客户端你发消息了,我是服务端,我接收到这个消息以后,我也对这个消息进行有个HMAC,然后我得到这个HMAC,我可以去验证一下客户端连同这个消息一起发过来的HMAC,他们两个是不是一致。如果一致,我就可以确定消息确实是客户端发给我的。

TLS1.3

优化HMAC算法

减少握手阶段

加密套件的简化

简化密钥协商算法

http/2

头部压缩

对header进行压缩,开发了专门的“HPACK”算法,在客户端和服务器两端建立“字典”,用索引号表示重复的字符串,

利用哈夫曼树对 响应和请求头进行编码。计算出先频率,编码。

二进制帧

不再是“Header+Body”的形式,而是分散为多个二进制“帧”

虚拟流

它是二进制帧的双向传输序列,HTTP/2 就可以在一个 TCP 连接上用“”同时发送多个“碎片化”的消息,这就是常说的“多路复用”( Multiplexing)——多个往返通信都复用一个连接来处理。而在“连接”的层面上看,消息却是乱序收发的“帧”。多个请求 / 响应之间没有了顺序关系,不需要排队等待,也就不会再出现“队头阻塞”问题,降低了延迟,大幅度提高了连接的利用率。

服务器推送

浏览器刚请求 HTML 的时候就提前把可能会用到的 JS、CSS 文件发给客户端,减少等待的延迟

也增强了安全性,要求至少是 TLS1.2,而且禁用了很多不安全的密码套件。

队头阻塞

通常我们说队头阻塞,都是说tcp,但是HTTP1.1中也有一个类似TCP队头阻塞的问题

TCP队头阻塞

TCP是一种可靠传输,这个可靠就是体现在它能够“按序到达”,然后再被上层接收,这里的按序到达指的是最终顺序是按序排列的,也就是说每当有一个或几个Packet丢失的时候,会等待它到达后合并,然后再向上交付。

当一个流的第一个数据包丢失了,那么即使后面的数据包都到达了,后面的这些数据包也不能被处理,而是要等第一个数据包到了之后才能被上层接收处理

HTTP队头阻塞

HTTP管道化要求服务端必须按照请求发送的顺序返回响应,那如果一个响应返回延迟了,那么其后续的响应都会被延迟,直到队头的响应送达。

如何解决队头阻塞

对于HTTP1.1中管道化导致的请求/响应级别的队头阻塞,可以使用HTTP2解决。HTTP2不使用管道化的方式,而是引入了帧、消息和数据流等概念,每个请求/响应被称为消息,每个消息都被拆分成若干个帧进行传输,每个帧都分配一个序号。每个帧在传输是属于一个数据流,而一个连接上可以存在多个流,各个帧在流和连接上独立传输,到达之后在组装成消息,这样就避免了请求/响应阻塞。

当然,即使使用HTTP2,如果HTTP2底层使用的是TCP协议,仍可能出现TCP队头阻塞。

http/3(HTTP-over-QUIC)

HTTP/2 虽然通过多路复用解决了 HTTP 层的队头阻塞,但仍然存在 TCP 层的队头阻塞。

连接双方的有任一个数据包丢失,或任一方的网络中断,整个TCP连接就会暂停,丢失的数据包需要被重新传输,从而阻塞该TCP连接中的所有请求,反而在网络较差或不稳定情况下,使用多个连接表现更好。

同时,TCP以及TCP+TLS建立连接存在的延迟(握手延迟)

因此提出了QUIC协议,一种基于UDP的低延时的互联网传输层协议。

QUIC基于UDP的低时延的互联网传输层协议,HTTP-over-QUIC于2018年11月更名为HTTP/3。

http3的主要目表是改进网络链接的性能和安全性。

降低延迟

在传统的 HTTP/1.1 和 HTTP/2 中,建立连接需要进行三次握手,这会引入一定的延迟。而在 HTTP/3 中,通过使用 QUIC 协议,可以实现零 RTT(Round-Trip Time)建立连接,即在建立连接的过程中不需要进行额外的往返时间。

QUIC 已经通过将传输和加密握手合并为一个,减少了典型连接握手的完整往返行程。

允许客户端在连接的第一次往返中发送应用程序数据,而无需事先完成任何其他握手。

有序交付

UDP 是不可靠传输协议,(不保证交付,不保证顺序,不保证不重复)

QUIC 在每个数据包都设有一个 offset 字段(偏移量),接收端根据 offset 字段就可以对异步到达的数据包进行排序了,保证了有序性。

队头阻塞

QUIC基于UDP, UDP的数据包在接收端没有处理顺序, 即使中间丢失一个包, 也不会阻塞整条连接. 其他的资源会被正常处理.

参考链接

juejin.cn/post/684490…

juejin.cn/post/711150…

juejin.cn/post/695973…

mp.weixin.qq.com/s/MHYMOYHqh…

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • http协议是什么?
    • TCP/IP 四层模型
      • OSI 七层模型
      • 输入网址再按下回车,后面发生了什么
      • http报文
      • 请求方法
      • http的特点
      • http有哪些优点?又有哪些缺点?
      • http传输大文件的方法
      • https
        • 本质
          • 具体过程
            • TLS1.3
            • http/2
              • 头部压缩
                • 二进制帧
                  • 虚拟流
                    • 服务器推送
                    • 队头阻塞
                      • TCP队头阻塞
                        • HTTP队头阻塞
                          • 如何解决队头阻塞
                          • http/3(HTTP-over-QUIC)
                            • 降低延迟
                              • 有序交付
                                • 队头阻塞
                                • 参考链接
                                相关产品与服务
                                SSL 证书
                                腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档