http协议详解【一】

参考链接

Http持久链接、非持久链接和pipeline链接
HTTP/2.0 相比1.0有哪些重大改进?
HTTP2.0性能加强的核心:二进制分帧css

在网络信息传输过程当中,都会套用经典的五层模型。html

理论部分

http发展历史

http/0.9

http/0.9http发展过程当中第一个定稿的协议。web

  1. http 只有一个get命令
  2. 没有header去面熟数据信息
  3. 服务器发送完毕,就关闭TCP链接

http/1.0

  1. 增长了不少命令
  2. 增长statys codeheader
  3. 多字符集支持,多部份发送、权限、缓存等。

http/1.1

  1. 持久链接

http/1.0中,客户端要想和服务器通讯,发送一个http请求,要建立一个http链接,就必需要建立一个TCP链接,在服务端返回内容以后TCP链接就会被关闭(TCP链接的创建须要通过三次握手,比较耗费性能。)。而在http1.1中,实现了持久链接,能够在服务端返回内容以后,继续保持TCP链接状态而不关闭。缓存

持久链接状况下,服务器发出响应后让TCP链接继续打开着。同一对客户/服务器之间的后续请求和响应能够经过这个链接发送。安全

Http1.1默认使用持久链接,若是客户端或者服务端任何一方不想使用持久链接,须要经过字段connection:close来通知对方。`服务器


  1. 支持pipeline

HTTP/1.1的新特性,容许在持久链接(也就意味着pipeline是依赖于持久链接的,而不是独立的上可选地使用请求管道。在响应到达以前,能够将多条请求放入队列。当第一条请求经过网络流向服务器时,第二条和第三条请求也能够开始发送了。在髙时延网络条件下,这样作能够下降网络的环回时间,提升性能。 网络

pipeline

对于http/1.1中的pipeline,存在一个缺点:以上图为例,client依次发送了三个请求,按前后顺序,咱们将其依次标记为request1,request2,request3。假设服务端对request1请求内容的处理是比较耗时的,在request1请求处理完成以前,request2request3已经处理完成了,而此时,request2request3对应的response2response3还不能返回,必须等到response1返回以后才能返回。ide

换句话说,对于pipeline的请求顺序和响应顺序是相对应的。性能


  1. 增长host

经过host这个属性,咱们能够在同一台物理服务器能够部署多个web服务,提升服务器的利用率。优化


http2

http2

  1. 二进制数据帧

在不改动http/1.1的语义、方法、状态码、URI以及首部字段...的状况下,http2是如何作到[突破http1.1的性能限制、改进传输性能、实现低延迟和高吞吐量的?]

关键之一就在于应用层http2和传输层之间TCP/UDP之间增长一个二进制分帧层:

二进制分帧

在二进制分帧层中,http/2会将全部传输的信息分割为更小的信息和帧(frame),并对他们采用二进制格式的编码,其中http1.1的首部头信息被封装到header frame而相应的request body则被封装到data frame中.


  1. 头信息压缩

HTTP 2.0 在客户端和服务器端使用“首部表”来跟踪和存储以前发送的键-值对,对于相同的数据,再也不经过每次请求和响应发送;通讯期间几乎不会改变的通用键-值对(用户代理、可接受的媒体类型,等等)只 需发送一次。事实上,若是请求中不包含首部(例如对同一资源的轮询请求),那么 首部开销就是零字节。此时全部首部都自动使用以前请求发送的首部。

若是首部发生变化了,那么只须要发送变化了数据在Headers帧里面,新增或修改的首部帧会被追加到“首部表”。首部表在 HTTP 2.0 的链接存续期内始终存在,由客户端和服务器共同渐进地更新 。


  1. 并行双向字节流的请求和响应

同一个链接里面发送多个请求再也不须要按照顺序进行 在HTTP2.0上,客户端和服务器能够把HTTP 消息分解为互不依赖的帧,而后乱序发送,最后再在另外一端把它们从新组合起来。注意,同一连接上有多个不一样方向的数据流在传输。客户端能够一边乱序发送stream,也能够一边接收者服务器的响应,而服务器那端同理。

HTTP 消息分解为独立的帧,交错发送,而后在另外一端从新组装是 HTTP 2.0 最 重要的一项加强。事实上,这个机制会在整个 Web 技术栈中引起一系列连锁反应, 从而带来巨大的性能提高,由于:

  • 能够并行交错地发送请求,请求之间互不影响;

  • 能够并行交错地发送响应,响应之间互不干扰;

  • 只使用一个链接便可并行发送多个请求和响应;

  • 消除没必要要的延迟,从而减小页面加载的时间;


  1. 推送

HTTP 2.0 新增的一个强大的新功能,就是服务器能够对一个客户端请求发送多个响应。换句话说,除了对最初请求的响应外,服务器还能够额外向客户端推送资源,而无需客户端明确地请求。

有了HTTP2.0的服务器推送,HTTP1.x时代的内嵌资源的优化手段也变得没有意义了。并且使用服务器推送的资源的方式更加高效,由于客户端还能够缓存起来,甚至能够由不一样的页面共享(依旧遵循同源策略)。

举例来讲,client请求了一个htmlserver能够主动将该html所须要引用的img,css,style推送给client,而不须要等到服务器解析html时再来请求相应的文件。


URI URL URN

URI uniform resource identifier 统一资源标识符,包含urlurn.

URL uniform resource locator统一资源定位器.


user:passurl中的定义,但因为其安全性和可操做性,如今已经不使用了


URN uniform resource name 统一资源名称.


URN统一资源定位符。URN是做为特定内容的惟一名称使用的,与当前资源的所在地无关。使用URN,在资源移动以后还能被找到,这样就能够将资源四处迁移,而不用担忧迁移后没法访问。目前没有很好的实现方案,也没有具体的使用场景。

相关文章
相关标签/搜索