前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >阶段六:浏览器中的网络

阶段六:浏览器中的网络

作者头像
六个周
发布于 2022-10-28 06:41:12
发布于 2022-10-28 06:41:12
36500
代码可运行
举报
文章被收录于专栏:六个周六个周
运行总次数:0
代码可运行

29 | HTTP/1:HTTP 性能优化

超文本传输协议 HTTP/0.9

HTTP/0.9 是在 1991 年提出。 主要用于学术交流-在网络之间传递 HTML 超文本内容,所以被称为超文本传输协议(HyperText Transfer Protocol)。 过程是:客户端根据 IP 地址、端口号和服务器建立 TCP 连接,建立连接后,发送一个 GET 请求行消息来获取 html,服务器接收到这个 Get 请求,将数据以 ASCII 字符流返回给客户端,html 传输完成,断开连接。 特点是:只有一个请求行,没有 HTTP 请求头和请求体;服务器也没有返回头信息,只有返回的数据;返回的文件内容是以 ASCII 字符流来传输的。 关键词:1991 年、学术交流、Get、超文本内容、ASCII

被浏览器推动的 HTTP/1.0

新兴网络的发展,浏览器需要展示的内容不单单是 HTML 文件,还有 JS、CSS、图片、音频、视频等不同类型的文件,也就是说 HTTP1.0 的核心诉求就是要支持多种类型的文件下载,且文件格式不再局限于 ASCII 编码了。 为了满足多种类型文件的传输,HTTP/1.0 引入了请求头和响应头。 请求头的内容有:服务器返回的文件类型、文件压缩方式、提供什么语言文件、文件的具体编码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
accept: text/html
accept-encoding: gzip, deflate, br
accept-Charset: ISO-8859-1,utf-8
accept-language: zh-CN,zh

除了对多文件的增强外,还根据实际需求引入了几个新增的典型特性:

  • 引入了**状态码 **
  • 为了减轻服务器压力,HTTP/1.0 提供了 Cache 机制,用来缓存下载过的数据
  • 在请求头中加入了用户代理的字段(为了统计客户端的信息–比如 WindowsMacOS 用户数量为多少)

HTTP/1.0 关键词:多种类型文件、请求头和响应头、状态码、Cache 机制、用户代理

缝缝补补的 HTTP/1.1

改进持久性连接

随着发展,一个页面可能包含几百个外部资源文件,为了解决每次下载都需要建立 TCP 连接,HTTP/1.1 中增加了持久性连接的方法,特点是可以在一个 TCP 连接上传输多个 HTTP 请求,只要浏览器或者服务器没有明确断开连接,那么持久性连接就会使得该 TCP 连接一直保持。 然后,这么做就减少了服务器的负担,提升了 HTTP 的请求时长,他的持久性连接是默认开启的,如果想关闭通过 Connection:close。 目前,浏览器对于同一个域名,默认允许建立 6 个 TCP 持久连接。 如果想增加 TCP 的连接,可以使用一种叫做域名分片的技术:把该站点下面的资源放在多个域名下。

不成熟的 HTTP 管线化

如果 TCP 通道中的某个请求因为某些原因没有及时返回,那就会阻塞后面的所有请求,这就是著名的队头阻塞问题。 HTTP/1.1 使用了管线化技术,但是不成熟。 HTTP/1.1 的管线化技术是将多个 HTTP 请求整批发送给服务器的技术。虽然整批发送了请求,但是服务器依然需要根据请求顺序来回复浏览器的请求。

提供虚拟主机的支持

随着虚拟主机发展,一台主机可以绑定多个虚拟主机,每个虚拟主机都可以有自己的单独域名。 于是,HTTP/1.1 的请求头中添加了 Host 字段,用来表示当前的域名地址。

对动态生成的内容提供了完美支持

在 HTTP/1.0 那会,浏览器根据响应头中设置的服务器告诉的数据大小来进行数据的接收,但随着服务器端发展,服务器返回的内容为动态生成,也就在传输数据的时候不知道最终的数据大小是多少,这个时候浏览器也就不知道到底接收多少数据。 于是,HTTP/1.1 引入了Chunk transfer机制,服务器将数据分割成任意大小的数据块,每个数据块发送时会附上上个数据的长度,最后一个使用零长度来作为发送数据完成的标志,于是也就提供了对动态内容的支持。

客户端 Cookire、安全机制

添加 Cookie。

HTTP/1.1 关键词:改进持久性连接、添加了 Host 字段、Chunk transfer 机制、Cookie、解决队头阻塞问题使用用不成熟的管线化技术。

30 | HTTP/2:如何提升网络速度?

HTTP/1.1 的主要问题

HTTP/1.1 的核心问题是:对宽带的利用率不理想。 宽带是指每秒最大能发送或者接收的字节数,我们把每秒能发送的最大字节数称为上行宽带,每秒能接受的最大字节数称为下行宽带。出现宽带利用率的问题,主要有三个原因导致:

  • TCP 的慢启动:慢启动是 指刚开始的时候 TCP 协议它会采用一种非常慢的速度去发送数据,然后慢慢加快发生数据的速度,这是 TCP 这个协议为减少网络阻塞的一种策略,我们无法改变。
  • 开启了多条 TCP 连接,那么这些连接会竞争固定的宽带,会影响关键资源的下载速度。
  • HTTP/1.1 的队头阻塞问题:持久化连接可以共用一个通道,且同一时刻只能处理一个请求,请求没结束前,其它请求只能处于阻塞状态。

HTTP/2 的多路复用

针对 HTTP/1.1 的问题,队头阻塞是由于 TCP 本身机制导致的,所以 HTTP/2.0 就针对了如何规避 TCP 的慢启动和 TCP 连接之间的宽带竞争下手。 HTTP/2 的解决思路是一个域名只使用一个TCP 长连接来传输数据,这样整个页面的资源下载只需要一次慢启动,且避免了多个 TCP 连接竞争宽带的问题。 当然如果一个域名使用一个TCP长连接,那么针对队头阻塞问题,请求完一个请求再去发送另一个请求无疑是非常慢的,所以 HTTP/2 需要实现资源的并行请求:也就是任何时候都可以将请求发送给服务器。 一句话总结 HTTP/2 为:一个域名只使用一个 TCP 长连接和解决队头阻塞问题。 也就是最具颠覆性的多路复用机制。 多路复用机制的过程:是说每一个请求都一有一个对应的ID,服务端拿到这些请求的ID和内容后,自行决定哪些是关键资源,然后立即将关键资源返回。好处就是优先处理关键资源请求。

多路复用的实现

HTTP/2添加了一个二进制分帧层。 然后客户端发送过来的请求,经过这个层,进行处理给他们编号(帧),然后发送给服务器。 服务器接收到请求,将相同编号的进行合并成一条完整信息进行一次处理,然后再返回给这个二进制分帧层。 二进制分帧层再将响应数据拆开,然后返回给客户端。

HTTP/2其他特性-基于二进制分帧层

  • 可以设置请求的优先级
  • 服务器推送:HTTP2可以直接将数据提前推送至客户端
  • 头部压缩:对请求头和响应头做了压缩。
其它

HTTP/2没必要使用雪碧图了。

31|HTTP/3:甩掉TCP、TLS 的包袱,构建高效网络

本文的学习目录为:先分析HTTP2的主要缺陷三条,然后解决方法一条的展开:

TCP的队头阻塞

TCP的队头阻塞是由于TCP是为了单连接而设计的,这样的设计导致的是:在传输数据过程中如果发生丢包,那么TCP连接就会处于暂停状态,等待重新传过来的包。 在TCP的传输过程中,由于单个数据包的丢失而造成的阻塞称为TCP上的队头阻塞。 相对于HTTP/1.1发生丢包还比较看的过去,因为HTTP/1.1为每个域名开启了6个TCP连接,其中一个发生丢包不会影响其它五个,而对HTTP2来说,由于只有一个TCP连接通道,若任何一次请求发生丢包,则会阻塞TCP连接中的所有请求。 然后通过HTTP2与HTTP1.1比较,当这个丢包率超过了2%的时候,HTTP1.1的传输效率反而比HTTP2要好。

TCP建立连接的延时

除了TCP队头阻塞,TCP握手也是影响传输效率的一个重要因素。 网络延迟又称为RTT(Round Trip Time),指的是浏览器发起一个数据包到服务器,服务器再返回数据包到浏览器的整个往返时间。 建立TCP连接的时候,三次握手使得需要消耗完1.5个RTT才能进行数据传输,如果有TLS连接,还需要1~2个RTT。也就是说,传输数据之前就需要花掉3~4个RTT,而一个RTT的时间可能是10毫秒以内,也就是总共需要消耗30~40毫秒,如果与服务器相隔较远,那么可能需要300-400毫秒,这个时候看到页面的效率就变慢了。

TCP协议僵化

目前掌握来看,HTTP2 的主要问题有TCP的队头阻塞和建立连接延迟的缺点,然后想要改进TCP协议才进行升级,比较困难,原因主要是因为中间设备的僵化。 为了保障互联网的正常工作,我们需要在各处搭建各种设备,这个设备就是指中间设备,包括路由器防火墙、交互机等,这些中间设计使用了大量TCP的特性且更新较少,因此如果客户端升级TCP协议,这些中间设备由于升级的困难,因此行不通。 除了中间设备外,操作系统也是TCP协议僵化的一个主要原因。因为TCP协议都是通过操作系统内核实现的,应用程序只能使用而不能修改。

QUIC协议

解决思路是绕过TCP协议,发明一个TCP和UDP之外的新的传输协议,HTTP/3就选择了一个折衷的方法–基于UDP协议实现类似于TCP的多路数据流、传输可靠性等功能,这套功能就称为QUIC协议。 QUIC协议集合了以下几个功能点:

  • 实现了类似TCP的流量控制、传输可靠性的功能。
  • 集成TLS加密功能:最重要的是减少了握手花费的RTT个数。
  • 实现了HTTP/2的多路复用功能。
  • 实现了快速握手功能。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
浏览器原理学习笔记06—浏览器中的网络
1991 年提出的用于学术交流的 HTTP超文本传输协议,基于 TCP 协议,只用来传输体积很小的 HTML 文件。因为需求简单,所以只有一个请求行,没有 HTTP 请求头和请求体;服务器也没有返回头信息;返回的 HTML 格式文件内容以 ASCII 字节码传输。
CS逍遥剑仙
2020/05/02
7760
浏览器工作原理 - 网络
HTTP / 0.9 是于 1991 年提出的,主要用于学术交流,需求很简单——用来在网络之间传递 HTML 超文本的内容,所以被称为超文本传输协议。整体看,实现也很简单,采用了基于请求响应的模式,从客户端发出请求,服务器返回数据。
Cellinlab
2023/05/17
3510
浏览器工作原理 - 网络
从HTTP/3的演进看web优化
对以上问题,面临的tcp协议的修改,由于tcp协议应用广泛,中间设备和操作系统的协议僵化,http3使用基于UDP实现了传输层协议QUIC(quick udp internet connection)
醉酒鞭名马
2020/04/19
2.3K1
从HTTP/3的演进看web优化
6 分钟了解 HTTP 发展史
HTTP/0.9 是于 1991 年提出的,主要用于学术交流,需求很简单——用来在网络之间传递 HTML 超文本的内容,所以被称为超文本传输协议。整体来看,它的实现也很简单,采用了基于请求响应的模式,从客户端发出请求,服务器返回数据。
用户4456933
2021/06/01
4950
6 分钟了解 HTTP 发展史
HTTP都到3.0了,你还不了解1和2吗?
HTTP 协议一共有四个阶段比较重要的阶段,分别是 0.9/1/2/3,其中1又分为1.0和1.1。
用户9899350
2022/07/29
5260
HTTP都到3.0了,你还不了解1和2吗?
QUIC网络协议简介
QUIC 全称 Quick UDP Internet Connection, 是谷歌公司研发的一种基于 UDP 协议的低时延互联网传输协议。在2018年IETF会议中,HTTP-over-QUIC协议被重命名为HTTP/3,并成为 HTTP 协议的第三个正式版本。本文将介绍QUIC协议的优势、特性和原理。
蒙古上单2
2019/03/20
9.6K0
QUIC网络协议简介
万字图解 | 深入揭秘HTTP工作原理
大家好,我是「云舒编程」,今天我们来聊聊计算机网络面试之-(应用层HTTP)工作原理。
公众号 云舒编程
2024/01/25
1.2K0
万字图解 | 深入揭秘HTTP工作原理
全方位解析浏览器渲染原理
很久之前就想关于浏览器渲染原理做一份总结性文章。之前也看过网上不少这个方面的文章,关于浏览器渲染机制的原理文章非常多但是总是觉得差那么一点意思,没有串联整个流程。所以这里打算串联这两部分,从原理和实践出发讲解他们背后的含义。
19组清风
2021/11/15
5140
全方位解析浏览器渲染原理
QUIC协议原理浅解
导语 | QUIC,HTTP3 的传输层实现,是近年来诞生的非常强悍的传输协议,它利用 UDP 解决了当前基于 TCP 协议的 HTTP 的许多问题,提升了在弱网环境下的网络通信体验,下面让我们来一探究竟。文章作者:江炜隆,腾讯云CDN产品研发工程师。 一 、QUIC究竟是什么 1. 什么是QUIC? QUIC(Quick UDP Internet Connection)是谷歌推出的一套基于 UDP 的传输协议,它实现了 TCP + HTTPS + HTTP/2 的功能,目的是保证可靠性的同时降低
腾讯云开发者
2021/03/16
4.1K0
【HTTP】843- 揭秘 HTTP2
前段时间组内小伙伴遇到了一个问题:一个页面上有 10 个视频,因为浏览器对 tcp 连接数的限制,导致同时只能加载 6 个视频。考虑到http2协议的多路复用可以解决这个问题,特地整理此篇关于http2的内容和大家分享。
pingan8787
2021/01/28
1.7K0
【HTTP】843- 揭秘 HTTP2
QUIC:下一代通信协议
一. 前言 自 2015 年以来,QUIC 协议开始在 IETF 进行标准化并被国内外各大厂商相继落地。 鉴于 QUIC 具备“0RTT 建连”、“支持连接迁移”等诸多优势,即将成为下一代互联网协议。 阅读完本文你将了解和学习到: HTTP协议发展史 HTTP各版本存在的问题,以及各版本解决了哪些问题 QUIC协议特性 再也不怕面试官问HTTP相关的问题了! 行文思路: 从历史使用最广泛的HTTP1.1开始,介绍各版本存在的问题,以及新版本如何解决旧版本存在的问题 二. HTTP协议发展史 HTTP
QQ音乐前端团队
2021/11/22
1K0
二、《图解HTTP》- HTTP协议历史发展(重点)
这一章节基本上大部分为个人扩展,因为书中的内容讲的实在是比较浅。本文内容非常长,另外哪怕这么长也只是讲到了HTTP协议的一部分而已,HTTP协议本身十分复杂。
阿东
2022/08/12
6800
二、《图解HTTP》- HTTP协议历史发展(重点)
真正“搞”懂HTTP协议07之队头阻塞真的很烦人
这一篇文章,我们核心要聊的事情就是HTTP的对头阻塞问题,因为HTTP的核心改进其实就是在解决HTTP的队头阻塞。所以,我们会讲的理论多一些,而实践其实很少,要学习的头字段也只有一个,我会在最开始就讲完这个头字段,然后我们安心的去学习接下来的理论知识,嗯……这些理论知识很重要。
zaking
2023/01/13
1.8K0
真正“搞”懂HTTP协议07之队头阻塞真的很烦人
[计算机网络]课程论文:万字长文详解QUIC协议,为什么有了TCP我们还需要QUIC?
在三十年前,我们见证了显卡和网卡作为CPU的辅助外设的时代。然而,随着技术的发展,这些外设逐渐演变成了核心组件,GPU和SmartNIC现在在某些应用场景中扮演着类似CPU的角色。这种转变反映了硬件技术的进步和应用需求的变化。
程序员洲洲
2024/06/07
4430
[计算机网络]课程论文:万字长文详解QUIC协议,为什么有了TCP我们还需要QUIC?
一文读懂 HTTP/1HTTP/2HTTP/3
作者:charryhuang,腾讯 CSIG 前端开发工程师 从 1989 年万维网(www)诞生,HTTP(HyperText Transfer Protocol)经历了众多版本迭代,WebSocket 也在期间萌芽。1991 年 HTTP0.9 被发明。1996 年出现了 HTTP1.0。2015 年 HTTP2 正式发布。2020 年 HTTP3 或能正式使用。以下将会简单介绍。 HTTP1.1 与 HTTP2 HTTP1.1 的缺陷 高延迟 — 队头阻塞(Head-Of-Line Blocki
腾讯技术工程官方号
2020/02/10
1.5K0
一文读懂 HTTP/1HTTP/2HTTP/3
HTTP探索之路 - HTTP 1 / HTTP 2 / QUIC
从1989年万维网(www)诞生,HTTP(HyperText Transfer Protocol)经历了众多版本迭代,WebSocket也在期间萌芽。1991年HTTP/0.9被发明;1996年出现了HTTP/1.0;2015年HTTP/2正式发布;2020年HTTP/3或能正式使用。以下将会简单介绍。 一、HTTP 1.1 与 HTTP 2 1.1 HTTP 1.1 的缺陷 高延迟 — 队头阻塞(Head-Of-Line Blocking) 无状态特性 — 阻碍交互 明文传输 — 不安全
用户1097444
2022/06/29
8610
HTTP探索之路 - HTTP 1 / HTTP 2 / QUIC
科普:QUIC 协议原理分析
本文将主要介绍 QUIC 协议产生的背景和核心特性。
腾讯技术工程官方号
2018/01/10
9.1K1
科普:QUIC 协议原理分析
深入剖析HTTP3协议
自2017年起HTTP3协议已发布了34个Draft,推出在即,Chrome、Nginx等软件都在跟进实现最新的草案。本文将介绍HTTP3协议规范、应用场景及实现原理。
陶辉
2023/10/18
2.5K0
深入剖析HTTP3协议
QUIC协议的分析,性能测试以及在QQ会员实践
原文链接:http://wetest.qq.com/lab/view/384.html
WeTest质量开放平台团队
2018/05/10
1.8K0
QUIC协议的分析,性能测试以及在QQ会员实践
连肝7个晚上,总结了计算机网络的知识点!(共66条)
http1.1中浏览器再也不用为每个请求重新发起TCP连接了,增加内容有:缓存相关首部的扩展,OPTIONS方法,Upgrade首部,Range请求,压缩和传输编码,管道化等。但还是满足不了现在的web发展需求,so,就有了http.2版本。
小灰
2020/07/15
6880
连肝7个晚上,总结了计算机网络的知识点!(共66条)
相关推荐
浏览器原理学习笔记06—浏览器中的网络
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验