http协议发展历史和各版本之间的区别 📖
前言
HTTP是web编程最为基础的了知识了,有 互联网基石
的称号可想有多重要, 准备重新整理输出一篇博客,通过这种方式去加深印象
HTTP/0.9
在最早的时候呢,第一个定稿http协议是http0.9,在这个版本的http协议非常简单
只有一个GET命令
没有header等相关描述数据的信息
服务器发送完毕,就关闭了TCP连接
短连接,一个TCP只能发送一个HTTP请求
因此,为了解决这些特性带来的问题, 在后续的http1.1 就进行了升级,在同一个TCP连接中可以发送 多个请求,更快的提升了http的传输效率和服务性能
HTTP/1.0
新增了很多命令
POST,PUT,HEADER等
新增了status code等 header头相关信息
发送和请求数据的一些描述
新增了多字符集,多部分发送,权限,缓存等
有了这些东西后,能够更好的有利于的去实现web服务
HTTP/1.1 (目前应用最多最广泛)
新增持久链接 keep-alive( 默认开启 )
在一个TCP连接中可以发送多个HTTP请求, 一个HTTP请求肯定是在在某个TCP连接中去发送的
keep-alive
: 在HTTP1.1的升级最主要的是 keep-alive
持久链接 大大的减少了每次请求都要建立一次TCP连接带来的耗时,从而提升了HTTP请求性能,keep-alive 带来这么大性能提升的同时也也有他的缺点
当然keep-alive
也有缺点: 就算是在空闲状态,它还是会消耗服务器资源,而且在重负载时,还有可能遭受 DoS attack 攻击。这种场景下,可以使用非长连接,即尽快关闭那些空闲的连接,也能对性能有所提升。
DOS攻击类型
- 带宽攻击
- 服务器请求泛滥
- SYN 泛滥攻击
- ICMP 泛滥攻击
- 点对点攻击
- 永久 DoS 攻击
- 应用层泛滥攻击
新增 pipeline ( 默认关闭 )
HTTP流水线模型 ,服务端在多个连续的请求甚至都不用等待立即返回就可以被发送 )
新增域名分片 ( 默认关闭,在HTTP2 中就没必要使用这个了,集成了更好的解决方案 )
作为 HTTP/1.x 的连接,请求是序列化的,哪怕本来是无序的,在没有足够庞大可用的带宽时,也无从优化。一个解决方案是,浏览器为每个域名建立多个连接,以实现并发请求。曾经默认的连接数量为 2 到 3 个,现在比较常用的并发连接数已经增加到 6 条。如果尝试大于这个数字,就有触发服务器 DoS 保护的风险。域名分片主要解决的就是这个问题
如果服务器端想要更快速的响应网站或应用程序的应答,它可以迫使客户端建立更多的连接。例如,不要在同一个域名下获取所有资源,假设有个域名是 www.example.com
,我们可以把它拆分成好几个域名:www1.example.com
、www2.example.com
、www3.example.com
。所有这些域名都指向同一台服务器,浏览器会同时为每个域名建立 6 条连接(在我们这个例子中,连接数会达到 18 条)。这一技术被称作域名分片。
HTTP/2 (未来的趋势,目前还没有普及)
所有数据都是以二进制来进行传输
HTTP/2之前都是用的字符串进行传输
同一个连接中发送多个请求不再需要按照顺序来
HTTP/2之前都是通过串行请求来响应请求,有了这个功能后可以并行返回请求了
头信息压缩
推送(服务端能够向客户端推送消息)
有了推送功能后,可以实现html/css/js 并行下载,而不是等到加载到html后,再解析DOM时再去加载css/js/image等资源文件