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.comwww2.example.comwww3.example.com。所有这些域名都指向同一台服务器,浏览器会同时为每个域名建立 6 条连接(在我们这个例子中,连接数会达到 18 条)。这一技术被称作域名分片。

HTTP/2 (未来的趋势,目前还没有普及)

所有数据都是以二进制来进行传输

HTTP/2之前都是用的字符串进行传输

同一个连接中发送多个请求不再需要按照顺序来

HTTP/2之前都是通过串行请求来响应请求,有了这个功能后可以并行返回请求了

头信息压缩

推送(服务端能够向客户端推送消息)

有了推送功能后,可以实现html/css/js 并行下载,而不是等到加载到html后,再解析DOM时再去加载css/js/image等资源文件