HTTP/2笔记之开篇

标签: http 笔记 | 发表时间:2015-03-17 14:50 | 作者:nieyong
出处:http://www.blogjava.net/

前言

本系列基于HTTP/2第17个草案文档,地址就是: https://tools.ietf.org/html/draft-ietf-httpbis-http2-17。

HTTP/2规范已经通过发布批准,下面等待分配具体的RFC号码,不会有所较大的变动了。

HTTP/1.1的问题

一张图可以很较为全面的概括了HTTP/1.*存在缺陷:

前端一般采用: - CSS Spriting,小图合并成大图,CSS进行分割成小图显示 - Inlining,使用DataURL方式内嵌Base64编码格式图片 - JS Concatenation,多个JS文件合并成一个,缺陷是一旦有文件修改,需要重新合并 - Sharding,将资源/服务部署到多个机器上,均摊/分享请求压力

HTTP/1.*没有充分利用TCP特性,再加上同一个站点打开多个连接等,导致网络资源利用率不高。

HTTP/2改进点

与HTTP/1相比,主要区别包括:

  1. HTTP/2采用二进制格式而非文本格式
    • 高效紧凑传输解析
    • 更少错误倾向,没有了所谓的空白行、大写、换行符、空连接等
  2. HTTP/2是完全多路复用的,而非有序并阻塞的
    • HTTP/1.1默认情况下单个请求单个连接
    • HTTP/1.1流水线化pipelining方式导致较大/较慢的响应阻塞后续任务
    • HTTP/1.1无法解决线头阻塞的问题
    • 多路复用可以有效避免线头阻塞,多个请求-响应同一个连接内并行处理
  3. 只需一个连接即可实现并行
    • HTTP/1.*请求处理模型导致同一个站点资源客户端需要打开若4-8个连接请求
    • HTTP/1.*多个连接会占用过多网路资源,导致TCP堵塞和数据重传
    • HTTP/2单个连接内多个流(请求-响应)之间并行处理,减少网路资源占用,可避免了TCP频繁的打开、关闭
  4. 使用报头压缩,HTTP/2降低了开销
    • 传统浏览器网路报头一般在80-1400字节大小
    • 压缩头部可让报头更紧凑,更快速传输,有利于移动网络环境等
    • 压缩算法使用HPACK,更为高效、安全
  5. HTTP/2让服务器可以将响应主动“推送”到客户端
    • 传统方式:客户端请求,服务器响应,客户端逐一解析需要后续请求的图片、样式等资源,再次一一发送资源请求
    • HTTP/2服务器根据客户端请求,计算出响应内容所包含的资源,在客户端发起请求之前提前发送给客户端
    • 节省客户端主动发起请求的时间的往返时间

这里有一张图,可以总体上了解HTTP/2:

HTTP/2的解读

保留/兼容HTTP/1.1的所有语义,但传输语法(或者说传输方式)改变,目的在于更充分利用TCP更高效传输,多路复用是实现途径,低延迟是改进方向。

笔记提纲

以上为简单总体介绍了HTTP/2协议,要想深入其特性,需要阅读器规范。下面为围绕HTTP/2规范的各个方面,列出提纲,便于后面一一填充。

  1. HTTP/2的连接建立 [待补充]
  2. HTTP/2的多路复用和流的属性 [待补充]
  3. HTTP/2的帧定义 [待补充]
  4. HTTP/2的消息交换 [待补充]
  5. HTTP/2的错误处理和安全事项 [待补充]

名词解释

以下名词会在当前或以后笔记中出现,贴出来方便理解。

  1. 中介(intermediation),指代包含代理、企业防火墙、反向代理和CDN等互联网设备
  2. ALPN,Application Layer Protocol Negotiation

小结

HTTP/2相比HTTP/1.1,可以做到更有效的充分利用TCP连接,避免了TCP连接的重复的创建(三次握手)、销毁(四次挥手)的过程。



nieyong 2015-03-17 14:50 发表评论

相关 [http 笔记] 推荐:

HTTP/2笔记之开篇

- - BlogJava-首页技术区
本系列基于HTTP/2第17个草案文档,地址就是: https://tools.ietf.org/html/draft-ietf-httpbis-http2-17. HTTP/2规范已经通过发布批准,下面等待分配具体的RFC号码,不会有所较大的变动了. 一张图可以很较为全面的概括了HTTP/1.*存在缺陷:.

Nginx+ffmpeg搭建Apple Http Live Streaming笔记

- - 移动开发 - ITeye博客
起始Nginx来搭建HLS步骤非常少. 安装好Nginx,然后跑起来. 把切片好的视频和m3u8文件放到部署目录,直接访问就可以了. 网上国内国外的找了好多博客. 这里一定注意一点,不要用VLC播放器来测试,最好用iPad或者iPhone,再么用Safari 开发模式下模拟iPad、iPhone的浏览器模式播放.

HTTP/2笔记之消息交换

- - BlogJava-首页技术区
无论是HTTP/1.*还是HTTP/2,HTTP的基本语义是不变的,比如方法语义(GET/PUST/PUT/DELETE),状态码(200/404/500等),Range Request,Cacheing,Authentication、URL路径. 以前纯文本形式作为传输的载体,HTTP/2带来了与之不同的二进制传输语法语义.

HTTP/2笔记之错误处理和安全

- - BlogJava-首页技术区
这里整理了一下错误和安全相关部分简单记录. HTTP/2定义了两种类型错误:. 导致整个连接不可使用的错误为连接错误(connection error). 单独出现在单个连接上的错误为流错误(stream error). 错误代码,32位正整数表示错误原因,RST_STREAM和GOAWAY帧中包含.

HTTP Headers 入门

- johnny - Time Machine
非常感谢 @ytzong 同学在twitter上推荐这篇文章,原文在此. 本文系统的对HTTP Headers进行了简明易懂的阐述,我仅稍作笔记. 什么是HTTP Headers. HTTP是“Hypertext Transfer Protocol”的所写,整个万维网都在使用这种协议,几乎你在浏览器里看到的大部分内容都是通过http协议来传输的,比如这篇文章.

HTTP基础

- - ITeye博客
HTTP的结构主要包括下面几个要点:. HTTP的版本主要有1.0,1.1 和更高版本.    1.1 及以上版本允许在一个TCP连接上传送多个HTTP协议,1.0能 .    1.1 及以上版本多个请求和响应可以重叠,1.0不能.    1.1 增加了很多的请求头和响应头.     一个请求行,若干小心头,以及实体内容,其中的一些消息头和实体内容是可选的,消息头和实体内容需要空行隔开.

HTTP Header 详解

- - 博客园_Ruby's Louvre
HTTP(HyperTextTransferProtocol)即超文本传输协议,目前网页传输的的通用协议. HTTP协议采用了请求/响应模型,浏览器或其他客户端发出请求,服务器给与响应. 就整个网络资源传输而言,包括message-header和message-body两部分. 首先传递message- header,即 http header消息.

HTTP/2 in Netty

- -
Here, we created a context for the server with a JDK SSL provider, added a couple of ciphers, and configured the Application-Layer Protocol Negotiation for HTTP/2..

HTTP负载测试

- - 博客 - 伯乐在线
英文原文: ON HTTP LOAD TESTING 来源: oschina. 有很多人在谈论HTTP服务器软件的性能测试,也许是因为现在有太多的服务器选择. 这很好,但是我看到有人很多基本相同的问题,使得测试结果的推论值得怀疑. 在日常工作中花费了很多时间在高性能代理缓存和源站性能测试方面之后,这里有我认为比较重要的一些方面来分享.

HTTP断点续传

- - CSDN博客互联网推荐文章
要实现断点续传的功能,通常都需要客户端记录下当前的下载进度,并在需要续传的时候通知服务端本次需要下载的内容片段. HTTP1.1协议(RFC2616)中定义了断点续传相关的HTTP头 Range和Content-Range字段,一个最简单的断点续传实现大概如下:.   1.客户端下载一个1024K的文件,已经下载了其中512K.