HTTP协议:HTTP1.0、HTTP1.1、HTTP2.0对比

早在HTTP建立之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。也是说对于前端来说,我们所写的HTML页面将要放在我们的web服务器上,用户端通过浏览器访问url地址来获取网页的显示内容,但是到了WEB2.0以来,我们的页面变得复杂,不仅仅单纯的是一些简单的文字和图片,同时我们的HTML页面有了CSS,Javascript,来丰富我们的页面展示,当ajax的出现,我们又多了一种向服务器端获取数据的方法,这些其实都是基于HTTP协议的。同样到了移动互联网时代,我们页面可以跑在手机端浏览器里面,但是和PC相比,手机端的网络情况更加复杂,这使得我们开始了不得不对HTTP进行深入理解并不断优化过程中。

对比

HTTP1.0 HTTP1.1 HTTP2.0
Host头
Range头
长连接
request method GET HEAD POST 以上+ OPTIONS PUT DELETE TRACE CONNECT 以上全部
cache Expire Last-Modefied Pragma 以上+ETag Cache-Control 以上全部
header压缩
多路复用
服务器推送

解析

我们这里主要选取了几个点来进行分析

Range

这里的RangeContent-Range 是针对于HTTP1.0的宽带浪费现象而提出来的一个解决方案。

在这里,我们接触的最多的便是断点续传了, 我们在请求下载某一个较大文件的时候,秉着耐心终于等到了99%了,但是这时候却突然断网了,如果再让你等待几十分钟去等待他重新下载完成,我们估计都要爆发了,而如果客户端,知道本地已经下了99%,只去请求服务端剩余的部分,这样不仅节约了用户的时间,还解决了服务器传输多余的重复数据而导致的宽带浪费

长连接

一个web页面上面可能包含几十个图片文件或js、css文件,在HTTP1.0的时代,规定了浏览器与服务器只能保持短暂的连接,浏览器的每个请求都要与服务器建立一个新的TCP连接,TCP的连接需要三次握手,https还需要校验证书,那么问题就暴漏出来了,这几十次图片、js、css文件其实是在同一个web页面里面的,如果我们去除多余的几十次三次握手,那么访问速度就会提升上来,HTTP1.1使用了长连接来解决这个问题,我们可以配置后台服务器的长连接的时间,超时无内容传输才会断开连接,从而,在一定时间内的浏览器的请求可以使用同一个TCP连接或者几个TCP连接,减少了握手带来的时间损耗

多路复用

既然上面解析了长连接,这里就把多路复用提上来吧。HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。

以chrome为例,每个页面,浏览器最多允许建立6个TCP连接,发起请求->服务端处理->响应请求 这样算是完成了一个浏览器请求。但是如果一个页面同时发起几百个请求,其中前几个请求又比较耗时,则会把这6个TCP连接全部占用,同时阻塞了后面的请求,这样整体请求都会慢下来了。

HTTP2采用多路复用是指,在同一个域名下,开启一个TCP的connection,每个请求以stream的方式传输,每个stream有唯一标识,connection一旦建立,后续的请求都可以复用这个connection并且可以同时发送,server端可以根据stream的唯一标识来相应对应的请求。这样上面请求阻塞的问题就可以得到解决。

服务器推送

意思是说,当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

header压缩

我们在传输文本等静态资源的时候,一般会开启压缩,gzip等,这样会减少宽带的占用,对于一些较大的文本文件,压缩后会减少的特别明显,相应也会感觉提升了很多。而header头信息的传输却一直使用字符串来传输,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。

对比

https://http2.akamai.com/demo 是Akamai公司建立的一个官方演示,我们可以很明显的看出HTTP2.0对HTTP1.1上的性能提升

http速度对比图

全站启用HTTP2

server {
    listen 83 http2;
}

在你的nginx配置文件的 listen 后面加上 http2 就可以启用HTTP2.0了,请放心使用,HTTP2.0已经兼容了HTTP1.1,如果你的浏览器不支持HTTP2.0的话,服务器使用HTTP1.1的协议进行传输

793 声望
223 粉丝
0 条评论
推荐阅读
深入解析raftexample,理解raft协议
说到raftexample,很多人可能很陌生,我知道raft,我也知道example,哪来的raftexample?这里做下简单的介绍,raftexample是etcd里面 raft模块实现的简单示例,它实现了一个简单的基于raft协议的kvstore存储集群...

tyloafer阅读 921

封面图
google 浏览器本地使用 https 的解决办法
本地开发 http://localhost需要使用 HTTPS 运行,devServer 设置了 https: true,依然打不开页面,点击高级也没有继续前往的选项。

时倾2阅读 585

Android安全之Https中间人攻击漏洞
HTTPS,是一种网络安全传输协议,利用SSL/TLS来对数据包进行加密,以提供对网络服务器的身份认证,保护交换数据的隐私与完整性。中间人攻击,Man-in-the-middle attack,缩写:MITM,是指攻击者与通讯的两端分别创...

YAQ御安全阅读 5.3k

拒绝裸奔,为 Elasticsearch 设置账号密码(qbit)
前言2019 年 5 月 21 日,Elastic 官方博客发文称,ES 6.8 和 7.1 免费开放基本的安全功能。包括: {代码...} 铭毅天下解读: Elasticsearch 7.1免费安全功能全景认知阮一鸣《Elasticsearch核心技术与实战》有对...

qbit阅读 6.4k

网红面试题:从输入 url 到看到页面发生了什么
这题扎眼看上去没问题,无非是 HTTP 请求到浏览器渲染,但可以聊的东西很多。我想它的执行顺序是,用户输入——开始导航——HTTP请求——浏览器渲染。其中用户输入、开始导航、浏览器渲染是浏览器方面的知识点,HTTP请...

山头人汉波2阅读 924

基于QUIC协议的HTTP/3,你了解多少?
前言了解一下HTTP发展史:HTTP/0.9-HTTP/1.0-HTTP/1.1-HTTP/2.0多个TCP连接 {代码...} Keep-alive {代码...} 管线化 {代码...} 多路复用 {代码...} {代码...} 并行多路复用的请求和响应不会相互阻塞尽管传输多个...

Henryk2阅读 1.1k评论 1

gitlab-ce将https修改为http
索性我们禁用gitlab的https功能,将期恢复为http。后期我们再在部署一个nginx进行数据转发,然后在nginx上起用https并设置证书。这样应该就规避了gitlab的证书错误问题。

myskies1阅读 615

793 声望
223 粉丝
宣传栏