前端培训-中级阶段(27)-http 2.0(2019-11-28期)

简介: 前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的中心思想,我们开课啦(每周四)。

什么是 HTTP2?


HTTP2 即超文本传输协议 2.0。是由互联网工程任务组(IETF)的 Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。主要是为了优化性能,前身是 Google 的 SPDY 。是兼容 HTTP1.1的


HTTP1.1 发布于 1999年。HTTP2 发布于 2015年5月


HTTP2 更新了什么?


  1. 二进制协议。可以定义额外的帧内容。


  1. TCP 链接复用。(并不是很有效)


  1. HTTP/2 头部压缩(HPack)
  1. 一份静态表(Static Table)
    包含常见的头部名称,以及特别常见的头部名称与值的组合。静态表规则地址,可以看到一个 POST 的请求头可以转化成一个数字来表示,缩小了很多。


bVbA9i2.webp.jpg


  1. 一份动态表(Dynamic Table),可以动态地添加内容
  2. 基于静态哈夫曼码表的哈夫曼编码(Huffman Coding)


4.ALPN
兼容性考虑(HTTP2、HTTP1.1),客户端告诉服务端所有支持的方式,服务端选择一个最优的来通信。


5.Server Push
在 HTTP 1.1 里,在同一个 TCP 连接里面,上一个回应(Response)发送完了,服务器才能发送下一个,但在 HTTP/2 里,可以将多个回应一起发送。


如何支持 HTTP2



Nginx 1.9.5+ 支持 HTTP2, 高版本的 Nginx 不支持 IE6 的 HTTPS(你们没看错我们还兼容 IE6)。


我们可以通过 Chrome 浏览器开发者工具的 Network 来查看当前请求使用的协议(Protocol 字段)


bVbA9pF.webp.jpg


HTTP1、HTTP1.1、HTTP2 比对



HTTP/1.1 vs HTTP/2


TCP通道复用问题


  1. HTTP/1 一个TCP链接上 只能有一个 请求/响应。
    每次浏览器(C)与服务端(S)完成请求处理以后,TCP 链接就会断开


  1. HTTP/1.1 一个 TCP 链接 可以复用 ,再完成一个可以继续下一个
    增加了长链接。 keep-alive 来开启长链接。也就是说完成请求处理以后 HTTP 连接会维持一段时间,这样在这段时间内如果有新的请求就能够直接传输而不需要再次进行 TCP 建立连接了。


  1. HTTP2 不需要等待,可以发送 多个
    引入了优先级、帧(Frame)、切块等概念。


课外话



TCP 协议通过慢启动机制、拥塞避免机制、加速递减机制、快重传和快恢复机制来共同实现拥塞控制。


HTTP2 与 HTTP1.1


新建了个域名,开启了 HTTP2


TCP


TCP 特性:可靠(知道接收方是否已接收)。对应 UDP(不可靠)。


接收方未收到时,需要有重发机制。但是如果本来就是因为接收方负载过高,那么就会造成网络拥堵、甚至导致把接收方打挂。


这个时候 TCP 要拥有控制流量的办法。防止大量数据过来等待接收。


1988年,Van Jacobson 和 Michael J.Karels 撰文描述了解决问题的几种算法:慢启动、拥塞预防、快速重发和快速恢复。这几种算法被写进了 TCP 规范。


TCP 拥塞窗口


当网络的负载超过了能处理的极限时,就会造成网络拥塞。


TCP 通过动态维护窗口的大小实现以最大负载来传输数据。有两种问题,网络问题,接收方问题。


发送方维护两个窗口:准许窗口(接收方允许的最大字节数)和拥塞窗口(Congestion Window) (发送方传递的字节数量)。最终发送的字节数量是两个窗口的最小值。


TCP 的慢启动机制


当连接建好时,发送方将拥塞窗口初始化为1,然后开始发送数据段。


如果数据段在定时器过期之前被确认,则将拥塞窗口的字节数翻倍(因为是翻倍,所以拥塞窗口会呈指数级增长,直到超时不被确认或者达到接收方窗口限制)。


如果数据段在定时器过期之前没有被确认,则认为网络拥塞。这个时候发送的字节数会减半(阈值也会变化),这个时候还有个阈值的逻辑。


这个算法被称为慢启动算法 ( Slow Start)


当 拥塞窗口 < 阈值 时,使用慢启动算法

当 拥塞窗口 > 阈值 时,使用拥塞避免算法

当 拥塞窗口 = 阈值时,既可以使用慢启动算法,也可时使用拥塞避免算法。


拥塞避免算法


拥塞避免算法的思路是让拥塞窗口缓慢地增大,呈线性增长,即每完成一次,拥塞窗口增加1。

相关文章
|
6月前
|
缓存 前端开发 UED
前端常见的HTTP状态码
【4月更文挑战第6天】HTTP状态码是服务器对请求的响应状态,分为1xx(处理中)、2xx(成功)、3xx(重定向)、4xx(客户端错误)和5xx(服务器错误)五大类。常见的如200(成功)、404(未找到)、500(服务器内部错误)。理解这些状态码有助于优化前端应用的请求处理和调试。
157 1
|
15天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
29 3
|
16天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
17 3
|
23天前
|
前端开发 JavaScript 中间件
前端全栈之路Deno篇(四):Deno2.0如何快速创建http一个 restfulapi/静态文件托管应用及oak框架介绍
Deno 是由 Node.js 创始人 Ryan Dahl 开发的新一代 JavaScript 和 TypeScript 运行时,旨在解决 Node.js 的设计缺陷,具备更强的安全性和内置的 TypeScript 支持。本文介绍了如何使用 Deno 内置的 `Deno.serve` 快速创建 HTTP 服务,并详细讲解了 Oak 框架的安装和使用方法,包括中间件、路由和静态文件服务等功能。Deno 和 Oak 的结合使得创建 RESTful API 变得高效且简便,非常适合快速开发和部署现代 Web 应用程序。
|
29天前
|
存储 前端开发 NoSQL
拿下奇怪的前端报错(四):1比特丢失导致的音视频播放时长无限增长-浅析http分片传输核心和一个坑点
在一个使用MongoDB GridFS存储文件的项目中,音频和视频文件在大部分设备上播放时长显示为无限,而单独播放则正常。经调查发现,问题源于HTTP Range请求的处理不当,导致最后一个字节未被正确返回。通过调整请求参数,使JavaScript/MongoDB的操作范围与HTTP Range一致,最终解决了这一问题。此案例强调了对HTTP协议深入理解及跨系统集成时注意细节的重要性。
|
30天前
|
缓存 前端开发 安全
前端开发者必备:HTTP状态码含义与用途解析,常见错误码产生原因及解决策略
前端开发者必备:HTTP状态码含义与用途解析,常见错误码产生原因及解决策略
105 0
|
5月前
|
前端开发 计算机视觉
视觉智能开放平台操作报错合集之人脸对比1:1,采用web前端直接调用,使用了base64处理图片,提示http错误码414,该如何处理
在使用视觉智能开放平台时,可能会遇到各种错误和问题。虽然具体的错误代码和消息会因平台而异,但以下是一些常见错误类型及其可能的原因和解决策略的概述,包括但不限于:1. 认证错误、2. 请求参数错误、3. 资源超限、4. 图像质量问题、5. 服务不可用、6. 模型不支持的场景、7. 网络连接问题,这有助于快速定位和解决问题。
|
5月前
|
编解码 自然语言处理 算法
技术心得:前端学HTTP之字符集
技术心得:前端学HTTP之字符集
38 0
|
6月前
|
前端开发 JavaScript 安全
第十篇 Axios最佳实战:前端HTTP通信的王者之选
第十篇 Axios最佳实战:前端HTTP通信的王者之选
282 0
|
6月前
|
JSON 前端开发 搜索推荐
BoostCompass( http_server 模块 | 项目前端代码 )
BoostCompass( http_server 模块 | 项目前端代码 )
64 4