HTTP各版本区别

 HTTP协议全称HyperText Transfer Protocol,中文名超文本传输协议。是互联网上应用最为广泛的一种网络协议。HTTP是基于TCP/IP协议的应用层协议,不涉及数据包的传输,主要是规定了客户端和服务器之间的通信格式。默认使用80端口。现在HTTP已经演化出了很多个版本。

  HTTP 0.9是最早发现的一个版本,在1991年发布,但是现在已经过时了,因为它只允许客户端发送一种GET请求,并且不支持请求头,因为没有协议头的原因,HTTP 0.9只支持纯文本一种内容,服务器只能回应HTML格式的字符串,里边不能插入图片。HTTP 0.9具有典型的无状态性,每个事务独立进行处理,事务结束时就释放这个连接。由此可见,HTTP协议的无状态特点在其第一个版本0.9中已经成型。

GET /index.html

上边命令表示在建立链接之后,客户端向服务器请求网页index的内容。十分简单。

  HTTP 1.0是HTTP协议的第二个版本在1996年发布,如今仍然被广泛使用,尤其是在代理服务器中。

首先这个版本之后,任何格式的文件都可以发送,这使得互联网不仅仅可以用来传输文字,还可以传输图像、音频、视频等二进制文件,这为互联网的兴起奠定了基础。

其次,1.0版本不仅仅支持GET命令还有POST和HEAD等请求方法,具体这两个有什么区别我们之后进行总结

  • HTTP的请求和回应格式也发生了变化,除了要传输的数据之外,每次通信都包含头信息,用来描述一些信息。

  • 还增加了状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等

   

GET / HTTP/1.0

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)

Accept: */*

这是HTTP1.0中的请求例子,这比0.9版本的要复杂了一些,在请求命令之后必须添加协议版本,后边就是用来描述客户端的一些情况。

HTTP/1.0 200 OK

Content-Type: text/plain

Content-Length: 137582

Expires: Thu, 05 Dec 1997 16:00:00 GMT

 Last-Modified: Wed, 5 August 1996 15:55:28 GMT

Server: Apache 0.84



<html> <body>Hello World</body> </html>

服务器回应的时候头信息+一个空格+具体数据 。第一行是协议版本+状态码+状态描述

 HTTP1.0版本虽然是支持长链接,但是默认情况还是短连接,需要使用keep-alive参数来告知服务器建立一个长链接。短连接的主要缺点就是每个TCP链接只能发送一个请求,发送数据完毕,链接就会关闭,如果还要请求其他资源就必须要再创建一个连接,TCP 的链接成本是很高的,因为服务器和客户端之间建立链接需要进行三次握手,并且链接初始的时候发送速率是比较慢的,所以HTTP1.0版本的性能比较差。虽然keep-alive可以可以建立一个可以复用的TCP链接,但是这并不是一个根本的办法。

   在1997年发布了新的HTTP版本HTTP1.1直到今天这还是最流行的一个版本

  1. HTTP1.1最大的变化就是引入了长链接,也就是TCP链接默认是不关闭的可以被多个请求复用。客户端或者服务器如果长时间发现对方没有活动就会关闭链接,但是规范的做法是客户端在最后一个请求的时候要求服务器关闭链接。对于同一个域名,目前浏览器支持建立6个长链接。

  2. 节约带宽,HTTP1.1支持只发送header头信息不带任何body信息,如果服务器认为客户端有权限请求指定数据那就返回100,没有就返回401,当客户端收到100的时候可以才把要请求的信息发给服务器。并且1.1还支持了请求部分内容,如果当前客户端已经有一部分资源了,只需要向服务器请求另外的部分资源即可,这也是支持文件断点续传的基础。

  3. 1.1版本中增加了host处理,在HTTP1.0中认为每台服务器都绑定一个唯一的ip地址,因此在URL中并没有传递主机名,但是随着虚拟机技术的发展,可能在一台物理机器上存在多个虚拟主机,并且他们共享了一个ip地址,http1.1中请求消息和响应消息都支持host头域,如果不存在还会报出错误

  虽然1.1版本对1.0有了很大的提升但是他还是存在缺点,在同一个TCP里边所有数据的通信都是按照次序的,服务器只有处理完一个回应,才会解决下一个回应要是前边某个回应处理的比较慢,就会出现后边很多回应等待的情况,这就是常说的队头阻塞。

 2015年的时候有了我们的HTTP2.0,虽然目前用的还是比较少,但是HTTP2.0的性能相比于以前版本有了很大的提升。HTTP2.0主要有以下特点:

1.2.0相比于1.x版本中引入了二进制格式,HTTP1.x版本中的解析是基于文本的,而2.0则是基于二进制的,二进制只有01两种信息,这样的数据传输方便并且出错率低。

  1. HTTP2.0版本中支持多路复用,支持同一个链接并发处理多个请求,并且并发请求的数量要比以前高出很多的数量级。当然http1.1版本中也支持创建多个TCP链接来处理多个并发的请求,但是创建TCP链接本身也是存在开销的,并且在链接创建初期传输的速度是比较慢的。

  2. 之前我们说从1.0版本开始请求和响应增加了header,header里边带有大量信息,并且每次都要重新进行发送,2.0版本通过算法把header进行了压缩这样数据体积就更小,在网络上传输就更快。

  3. HTTP2.0还支持服务器推送,服务器推送是当客户端请求一定数据的时候,服务器会额外的推送一些客户端可能会用到的信息,这样当客户端再次请求这个信息的时候,就可以直接从本机缓存中读取而不需要再次向服务器请求数据了。

HTTP各版本区别

这是网上的图片,这个图片很好的解释了长链接和多路复用的区别。至于短连接,无非就是当请求往index.html之后链接就会断开,需要再重新创建一个连接来获取scripts.css文件

HTTP各版本区别

HTTP各版本区别

这两个图片则分别是没有服务器推送和有服务器推送的请求的区别。