博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP - 发展历程
阅读量:5960 次
发布时间:2019-06-19

本文共 1646 字,大约阅读时间需要 5 分钟。

web项目开发中,我们通过http来传输数据,这里我们来看一下,http是什么以及发展历程。

what

HTTP,超文本传输协议。

在我们非常页面的开发中,用来传输html、css、js、图片、cgi等。

HTTP 0.9

HTTP 0.9版本,很简单,只有一行请求(请求方法+路径),响应只有一个HTML。

HTTP 1.0

正式的版本是HTTP 1.0

请求:请求版本 + 首部

响应:响应状态 + 首部(响应对象可以包含任何类型:html、纯文本、图片等)

HTTP 1.1

HTTP 1.1 是对于HTTP 1.0的优化,减少延迟。下面看下1.1增加的新功能。

持久链接

1.1的持久链接可以说是1.1的一大特色。

在1.0中,每次http链接都要进行tcp的三次握手和四次挥手。如果说请求不多的话,影响倒是不大,但是请求多的话,那么请求的总时间就会大大延长。

于是,1.1支持了持久链接(keep-alive),第一次链接之后,如果客户端&服务器都没有进行断开的操作,那么,tcp链接就一直保持。这样,当http请求多的时候,自然,速度相比于1.0的话就快得多了。

我们可以抓一下掘金的请求,响应头中可以看到,使用的是http 1.1 ,并且connection的状态是keep-alive。

HTTP管道

http的请求队列,是一个先进先出的队列,在1.0的时候,这个队列是由客户端控制的,每次发送请求的时候,需求等待上一个请求回包之后,再继续发下一个请求。这样会出现服务器会有大部分时间是属于空闲状态的。

所以1.1的版本,把http请求队列放到了服务器,客户端可以不用等待回包就可以继续发送下一个请求,服务器直接在队列中获取请求,然后一个一个处理,这样,就可以有效提升请求的效率。

使用多个tcp链接

http请求队列的处理移动到服务端之后,确实速度可以加快,不过这也是串行的,要提升服务器的效率,那我们需要进行并行的操作。

所以,1.1做的就是可以同时开多个tcp链接,这样就可以做到并行啦。不过,由于浏览器限制,每个域名的tcp链接最多只能开6个。

当然,如果页面想开更多的tcp链接,也是有办法的,tcp链接数是按域名区分的,那么我们只要再添加域名就可以增加tcp链接数啦~

HTTP 2.0

2.0是第二个正式的版本,对1.1做了更多的优化。

二进制分帧层

1.1版本传输的数据是文本,相比于文本,二进制传输起来更加方便,底层不用再进行解析。

多路复用

1.1的时候,为了解决并行,开了多个tcp链接。多路服用,就是为了解决并行而出现的。

1.1传输的数据是文本,不能乱序传输,所以只能串行。

2.0传输的是二进制,帧是最小的单位,这里对帧标志顺序,既然有顺序,传输就可以并行了,接受数据方再根据数据帧进行拼接,就可以得到正确的信息。

于是,多路复用解决了单个tcp并行传输的问题。

首部压缩

客户端&服务器对首部表进行存储

第一次发送整个首部,之后根据diff来更新diff部分的数据。

虽然首部内容不多,但是每条数据都少一点的话,世界也将更加美好。

服务器推送

服务器推送,有点像websocket。

当用户请求页面的时候,服务器先返回html,然后客户端再根据html解析请求需要的资源,这样子客户端其实要进行多个请求。

那么服务器推送的效果呢?当客户端访问html之后,服务器就先把客户端需要的资源发送给客户端,那么,客户端需要资源的时候,就不用发送请求来,因为客户端预先就拿到来资源,从而减少请求的时间。

HTTP 3.0

3.0的版本,可以说是改头换貌。

我们知道http 2.0之前,都是基于tcp的,因为tcp稳定。

而3.0却抛弃来tcp,拥抱udp,稳定的事情就交给上层来做,也就是quic。

这个后面再细讲,先留白。

写在最后

http无处不在,无论是开发需求也好,还是优化项目也好,都要熟悉http,才能更好的理解。

最后补充一下楼主之前的文章

转载地址:http://czfax.baihongyu.com/

你可能感兴趣的文章
不借助第三方插件利用ScrollView自身delegate实现下拉刷新和上拉加载
查看>>
如何设置Docker容器中Java应用的内存限制
查看>>
推荐几款工具
查看>>
深入浅出: 大小端模式
查看>>
深入浅出: Java回调机制(异步)
查看>>
Aliyun OSS Nginx proxy module(阿里云OSS Nginx 签名代理模块)
查看>>
linux中的mdev机制
查看>>
use zfs snapshot rollback postgresql's primary to old status in PG HA
查看>>
btrfs 使用指南 - 1 概念,创建,块设备管理,性能优化
查看>>
Android Studio 3.0 上 Gradle 改动
查看>>
[Vue]1-5. Vue.js核心知识之组件化
查看>>
链表(二)
查看>>
重学前端之 让人心态爆炸的this到底是个什么玩意
查看>>
阿里云服务器ECS 3年 279元
查看>>
lamp组合详解
查看>>
Android 自定义View基础(一)
查看>>
新锐时代(北京)网络科技有限公司拖欠工资
查看>>
(四)构建springmvc+mybatis+dubbo分布式平台-maven代码结构
查看>>
去掉键盘的方式
查看>>
css代码规范
查看>>