www.22138com「太阳集团游戏」太阳2007娱乐官方网址

欢迎更多朋友与我们www.22138com合作,太阳集团游戏是由安全软件管理软件整合而成的最新安全卫士,其实这是因为目前已经推出了太阳2007娱乐官方网址的新网址,带您体验至尊级享受!。

一分钟预览 HTTP2 特性和抓包分析

2019-06-08 02:09 来源:未知

1分钟预览 HTTP2 风味和抓包剖析

2016/09/26 · JavaScript · HTTP/2

初稿出处: 段隆贤   

背景

近年来,http互联网请求量日益增进,以下是httparchive计算,从二零一三-11-01到贰零一四-0玖-0一的呼吁数量和传导大小的动向图:

图片 1

 

当前大多数份客户端&服务端框架结构的应用程序,都以用http/一.1总是的,今世浏览器与单个域最厦门接数,都在四-四个左右,由上海教室Total Requests数据,假若不用CDN分流,平均有二十个左右的串行请求。
HTTP2是一玖玖八年发表http一.壹后的贰次首要的修正,在情商层面改革了以上难题,缩短财富占用,来,直接感受一下差别:

HTTP/2 is the future of the Web, and it is here!
那是 Akamai 公司确立的叁个官方的亲自过问,用以注明 HTTP/二 相比较于事先的 HTTP/一.一 在性质上的巨大升高。 同临时间呼吁 37玖 张图纸,从Load time 的对峙统壹能够看出 HTTP/二 在速度上的优势。

图片 2

 

正文全体源码和抓包文件在github

HTTP/2 源自 SPDY/2

SPDY 系列协议由谷歌开辟,于 二零一零 年唐哉皇哉。它的陈设性目的是降低 5/10的页面加载时间。当下游人如织有名的互连网商家都在团结的网站或 APP 中动用了 SPDY 种类协议(当前流行版本是 SPDY/三.一),因为它对品质的升级是扎眼的。主流的浏览器(谷歌、火狐、Opera)也都早已经支撑 SPDY,它早已改为了工业规范,HTTP Working-Group 最后决定以 SPDY/二为根基,开辟 HTTP/二。HTTP/二标准于二〇一六年二月以锐界FC 7540正规刊出。

唯独,HTTP/2 跟 SPDY 仍有两样的地点,主假若以下两点:

HTTP/二 支持明文 HTTP 传输,而 SPDY 强制行使 HTTPS
HTTP/二 信息头的压缩算法选拔 HPACK ,而非 SPDY 选择的 DEFLATE(多谢网民 逸风之狐指正)

情商文书档案请见:rfc7540:HTTP2

HTTP二本性大概浏览

1. 2进制协议

HTTP/2 选择2进制格式传输数据,而非 HTTP/一.x 的文本格式

图片 3

 

由上海体育场所能够看到HTTP二在本来的应用层和HTTP层增添了1层二进制传输。

2进制协议的贰个益处是,能够定义额外的帧。

HTTP/2定义了近10种帧(实际情况可深入分析抓包文件),为先天的高档应用打好了基础。要是使用文本达成这种功能,深入分析数据将会变得十分辛勤,二进制深入分析则有利得多。
RFC7540:Frame Definitions

图片 4

琢磨中定义的帧

二. 多路复用

HTTP/2复用TCP连接,在贰个连连里,客户端和浏览器都得以同一时候发送三个请求或回应,而且不用依据顺序依次对应,那样就幸免了”队头堵塞”(见TCP/IP详解卷一)。
各类 Frame Header 都有1个 Stream ID 便是被用于落到实处该本性。每一趟请求/响应使用分裂的 Stream ID。就仿佛叁个 TCP 链接上的数据包通过 IP: PORT 来区分出多少包去往何地同样。

图片 5

rfc7540: HTTP2 Multiplexing中对Multiplexing的说明

Streams and Multiplexing A "stream" is an independent, bidirectional sequence of frames exchanged between the client and server within an HTTP/2 connection. Streams have several important characteristics: o A single HTTP/2 connection can contain multiple concurrently open streams, with either endpoint interleaving frames from multiple streams. o Streams can be established and used unilaterally or shared by either the client or server. o Streams can be closed by either endpoint. o The order in which frames are sent on a stream is significant. Recipients process frames in the order they are received. In particular, the order of HEADERS and DATA frames is semantically significant. o Streams are identified by an integer. Stream identifiers are assigned to streams by the endpoint initiating the stream.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Streams and Multiplexing
 
   A "stream" is an independent, bidirectional sequence of frames
   exchanged between the client and server within an HTTP/2 connection.
   Streams have several important characteristics:
 
   o  A single HTTP/2 connection can contain multiple concurrently open
      streams, with either endpoint interleaving frames from multiple
      streams.
 
   o  Streams can be established and used unilaterally or shared by
      either the client or server.
 
   o  Streams can be closed by either endpoint.
 
   o  The order in which frames are sent on a stream is significant.
      Recipients process frames in the order they are received.  In
      particular, the order of HEADERS and DATA frames is semantically
      significant.
 
   o  Streams are identified by an integer.  Stream identifiers are
      assigned to streams by the endpoint initiating the stream.

3. 数据流

多少流发送到四分之2的时候,客户端和服务器都得以发送复信号(宝马X5ST_STREAM帧),裁撤这些数据流。一.一版裁撤数据流的独一无二办法,正是关闭TCP连接。那正是说,HTTP/二能够收回某一回呼吁,同临时候有限支撑TCP连接还展开着,能够被其它请求使用。

4. 头新闻压缩:

HTTP/二 对音讯头选取 HPACK 进行削减传输,能够节约新闻头占用的互联网的流量。而 HTTP/一.x 每趟请求,都会带走大量冗余头音信,浪费了无数带宽财富。
HTTP2对http头建立索引表,同样的头只发送hash table 的index, 同不经常候还用了霍夫曼编码和价值观的gzip压缩。

5. 服务器推送

服务端能够越来越快的把财富推送给客户端。比如服务端能够积极把 JS 和 CSS 文件推送给客户端,而无需客户端分析 HTML 再发送这一个请求。当客户端须求的时候,它早已在客户端了。

那便是说存在1个主题材料,即便客户端设置了缓存如何是好。有二种形式(来自社区)

  • 客户端能够透过安装SETTINGS_ENABLE_PUSH为0值公告服务器端禁止使用推送
  • 发掘缓存后,客户端和服务器都能够发送信号(安德拉ST_STREAM帧),撤除以此数据流。
  • cache-digest(提案)

    rfc7540: HTTP2 Server Push

    #### 陆. 流优先级

    HTTP二允许浏览器钦命财富的开始的一段时期级。

    rfc7540: Stream Priority

浏览器帮衬

主流浏览器都只协助 HTTP/贰 Over TLS

node中启用http2

node中能够用spdy模块来运维应用,spdy的api,与https是1致的且主流浏览器只援助HTTP/贰Over TLS,需求配置 私钥和证书,本地自签定服务器配置可参照引用6,7

JavaScript

const express = require('express'); const fs = require('fs'); const http2 = require('spdy'); const path = require('path'); const options = { key: fs.readFileSync('./keys/privatekey.pem'), cert: fs.readFileSync('./keys/certificate.pem') }; const app = new express(); http2 .createServer(options, app) .listen(8080, ()=>{ console.log(`Server is listening on . You can open the URL in the browser.`) } ) app.use("/",(req,res)=>{ res.send("hello http2!"); })

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const express = require('express');
const fs =  require('fs');
const http2 = require('spdy');
const path = require('path');
const options = {
    key: fs.readFileSync('./keys/privatekey.pem'),
    cert: fs.readFileSync('./keys/certificate.pem')
};
const app = new express();
http2
  .createServer(options, app)
  .listen(8080, ()=>{
    console.log(`Server is listening on https://localhost:8080.
     You can open the URL in the browser.`)
  }
)
app.use("/",(req,res)=>{
    
  res.send("hello http2!");
})

如上,对于已存在的品类只要修改几行代码就足以使用http二.0了。

请求头和响应头:

证实:新版的Chrome,对不安全的证件(如本地的自签署服务)会降级到http1.一,firefox不会油然则生此难点。

启动server push

JavaScript

一分钟预览 HTTP2 特性和抓包分析。app.get("/",(req,res)=>{ var stream = res.push('/app.js', { //服务器推送 status: 200, // optional method: 'GET', // optional request: { accept: '*/*' }, response: { 'content-type': 'application/javascript' } }) stream.on('error', function() { }) stream.end('console.log("http2 push stream, by Lucien ");') res.send(`hello http2! <script src="/app.js"></script>`);//express 并没有host static ,这个app.js 来自push })

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
app.get("/",(req,res)=>{
    var stream = res.push('/app.js', {   //服务器推送
    status: 200, // optional
    method: 'GET', // optional
    request: {
      accept: '*/*'
    },
    response: {
      'content-type': 'application/javascript'
    }
  })
  stream.on('error', function() {
  })
  stream.end('console.log("http2 push stream, by Lucien ");')
 
  res.send(`hello http2!
    <script src="/app.js"></script>`);//express 并没有host static ,这个app.js 来自push
})

源码在github

响应

抓包分析

能够用chrome 内部自带的工具(chrome://net-internals/)查看http2流量,但那一个包消息量比较少,结构不及大家听得多了自然能详细说出来的Fiddler查看http2流量,但这个包信息量比较少,结构不如我们熟悉的Fiddler) or Wireshark清晰。

Fiddler是一直作为中间代理,能够当作客户端直接与服务端通信,能够像浏览器那样直接解密https,直接看看https报文,
不过出于受限于.NET Framework暂不支持Http2.

用wireshark直接抓包 https:4四3端口的流量是如此的:

数量被加密了,协议细节完全看不到。
这里介绍了1种形式赢得私钥解包。
抓包https包时要把代理关了,不然私钥不是同二个,wireshark不能够解包(被那么些坑了两小时T T)。

3个包内有多少个例外的Steam ID

追踪解密后TCP流能够观望,由于多路复用,种种不一样的央浼交替传输差异的帧,所以流数据是乱的。但在平等帧内数据依然如常的。

最后

末段,HTTP2有越来越高的传输速度,越来越少的财富占用,能够去除各类质量优化tricks(如css sprite,inline-image.)
一分钟预览 HTTP2 特性和抓包分析。倒车WEB开辟的美好以后T.T

参谋资料

  1. Turn-on HTTP/2 today!
  2. Hypertext Transfer Protocol Version 2 (HTTP/2)
  3. npm spdy
  4. npm spdy push
  5. How to create a self-signed SSL Certificate
  6. HPACK: Header Compression for HTTP/2
  7. 用Node.js创制自签定的HTTPS服务器

    1 赞 收藏 评论

图片 6

版权声明:本文由太阳集团发布于太阳2007娱乐官方网址,转载请注明出处:一分钟预览 HTTP2 特性和抓包分析