>

特性和抓包分析,HTTP抓包分析工具

- 编辑:澳门新葡亰平台游戏 -

特性和抓包分析,HTTP抓包分析工具

最后

最终,HTTP2有更加高的传输速度,更加少的财富占用,能够去除种种质量优化tricks(如css sprite,inline-image.)
中间转播WEB开采的美好未来T.T

能够深入分析出http的tcp数据,很刚劲。

1. 二进制协议

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

图片 1

 

由上海教室能够看见HTTP2在原先的应用层和HTTP层增多了大器晚成层二进制传输。

二进制左券的八个功利是,能够定义额外的帧。

HTTP/2 定义了近十种帧(详细的情况可深入分析抓包文件),为不久前的尖端应用打好了基础。假诺采取文本完成这种效用,解析数据将会变得十分麻烦,二进制拆解解析则有利得多。
RFC7540:Frame Definitions

图片 2

合计中定义的帧

http://man.lupaworld.com/content/network/wireshark/index.html

HTTP/2 源自 SPDY/2

SPDY 种类合同由Google费用,于 二〇〇九 年明火执杖。它的两全目的是下落 百分之四十的页面加载时间。当下数不完闻明的互连网厂商都在和煦的网址或 应用软件 中央银行使了 SPDY 种类左券(当前最新版本是 SPDY/3.1),因为它对品质的晋升是明摆着的。主流的浏览器(Google、火狐、Opera)也都早就经援救SPDY,它曾经济体改成了工业标准,HTTP Working-Group 最终决定以 SPDY/2 为底蕴,开辟 HTTP/2。HTTP/2规范于二〇一五年二月以本田CR-VFC 7540规范公布。

不过,HTTP/2 跟 SPDY 依然有两样的地点,首若是以下两点:

HTTP/2 扶植明文 HTTP 传输,而 SPDY 强制行使 HTTPS
HTTP/2 新闻头的压缩算法接受 HPACK ,而非 SPDY 接受的 DEFLATE(谢谢网上老铁 逸风之狐指正)

共谋文书档案请见:rfc7540:HTTP2

***wireshark客户手册***

背景

近日,http互连网央求量日益丰硕,以下是httparchive总计,从2013-11-01到2016-09-01的伏乞数量和传导大小的可行性图:

图片 3

 

日前大多数份客商端&服务端架构的应用程序,都以用http/1.1延续的,今世浏览器与单个域最明斯克接数,都在4-6个左右,由上航海用教室Total Requests数据,假若不用CDN分流,平均有十八个左右的串行伏乞。
HTTP2 是一九九两年宣布http1.1后的二遍主要的改善,在情商层面纠正了以上难点,减少财富占用,来,直接感受一下差距:

HTTP/2 is the future of the Web, and it is here!
这是 Akamai 企业确立的一个合法的演示,用以注脚 HTTP/2 比较于事先的 HTTP/1.1 在性质上的小幅提高。 同时呼吁 379 张图纸,从Load time 的相持统生机勃勃能够看见 HTTP/2 在进度上的优势。

图片 4

 

本文全数源码和抓包文件在github

浏览器扶助

主流浏览器都只辅助 HTTP/2 Over TLS

node中启用http2

node中能够用spdy模块来运行应用,spdy的api,与https是同样的且主流浏览器只扶持HTTP/2 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!");
})

如上,对于已存在的门类只要改过几行代码就足以运用http2.0了。

要求头和响应头:

表达:新版的Chrome,对不安全的证书(如本地的自签署服务)会降级到http1.1,firefox不会冒出此难题。

启动server push

JavaScript

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

响应

HTTP2天性大概浏览

抓包解析

能够用chrome 内部自带的工具(chrome://net-internals/)查看http2流量,但以此包音讯量比较少,结构比不上我们耳闻则诵的Fiddler%E6%9F%A5%E7%9C%8Bhttp2%E6%B5%81%E9%87%8F,%E4%BD%86%E8%BF%99%E4%B8%AA%E5%8C%85%E4%BF%A1%E6%81%AF%E9%87%8F%E6%AF%94%E8%BE%83%E5%B0%91%EF%BC%8C%E7%BB%93%E6%9E%84%E4%B8%8D%E5%A6%82%E6%88%91%E4%BB%AC%E7%86%9F%E6%82%89%E7%9A%84Fiddler) or Wireshark清晰。

Fiddler是直接充任中间代理,能够当作顾客端直接与服务端通信,可以像浏览器那样直接解密https,直接看出https报文,
而是出于受限于.NET Framework暂不帮衬Http2.

用wireshark直接抓包 https:443端口的流量是那般的:

数量被加密了,左券细节完全看不到。
这里介绍了生机勃勃种艺术获得私钥解包。
抓包https包时要把代理关了,不然私钥不是同二个,wireshark不能够解包(被这么些坑了两小时T T)。

一个包内有几个例外的Steam ID

追踪解密后TCP流能够见到,由于多路复用,各种差别的伸手交替传输区别的帧,所以流数据是乱的。但在相通帧内数据仍然如常的。

一分钟预览 HTTP2 风味和抓包深入分析

2016/09/26 · JavaScript · HTTP/2

最先的小说出处: 段隆贤   

3. 数据流

数据流发送到二分之一的时候,顾客端和服务器都足以发送信号(OdysseyST_STREAM帧),撤销以此数据流。1.1版撤消数据流的必定要经过的道路方式,正是倒闭TCP连接。那就是说,HTTP/2 可以撤消某叁回呼吁,同时确认保证TCP连接还张开着,能够被其它供给使用。

5. 服务器推送

服务端能够更加快的把财富推送给顾客端。举个例子服务端能够主动把 JS 和 CSS 文件推送给顾客端,而无需客商端解析 HTML 再发送这几个须求。当顾客端要求的时候,它已经在客户端了。

那么存在二个主题素材,如果顾客端设置了缓存如何是好。有两种办法(来自社区)

  • 客户端能够因而设置SETTINGS_ENABLE_PUSH为0值通知服务器端禁止使用推送
  • 开掘缓存后,客商端和服务器都得以发送非复信号(奥迪Q5ST_STREAM帧),撤销以此数据流。
  • cache-digest(提案)

    rfc7540: HTTP2 Server Push

    #### 6. 流优先级

    HTTP2允许浏览器钦定能源的预先级。

    rfc7540: Stream Priority

4. 头音信压缩:

HTTP/2 对音讯头选择 HPACK 进行减少传输,能够节省音讯头占用的互连网的流量。而 HTTP/1.x 每一遍央求,都会带走大量冗余头音信,浪费了广大带宽能源。
HTTP2对http头建立索引表,相仿的头只发送hash table 的index, 同有时候还用了霍夫曼编码和古板的gzip压缩。

参照他事他说加以考察资料

  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 赞 收藏 评论

图片 5

2. 多路复用

HTTP/2 复用TCP连接,在多少个一而再里,顾客端和浏览器都能够並且发送多少个央求或应对,並且实际不是依据顺序依次对应,那样就幸免了”队头堵塞”(见TCP/IP详明卷生龙活虎)。
各种 Frame Header 皆有三个 Stream ID 就是被用于贯彻该个性。每一次须求/响应使用分化的 Stream ID。就好似二个 TCP 链接上的数目包通过 IP: PORT 来分别出多少包去往哪儿一样。

图片 6

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.

本文由前端php发布,转载请注明来源:特性和抓包分析,HTTP抓包分析工具