HTML5技术

一分钟预览HTTP2特性和抓包分析 - 段隆贤(2)

字号+ 作者:H5之家 来源:H5之家 2016-09-25 10:00 我要评论( )

fs http2 path options .. readFileSync ( ./keys/certificate.pem )() ; http2 . createServer (options , app) .. log ( `Server is listening on https://localhost:8080. You can open the URL in the browser.

fs http2 path options ..readFileSync('./keys/certificate.pem') (); http2 .createServer(options, app) ..log(`Server is listening on https://localhost:8080. You can open the URL in the browser.`) } ) .send("hello http2!"); })

如上,对于已存在的项目只要修改几行代码就可以使用http2.0了。

请求头和响应头:

image

说明:新版的Chrome,对不安全的证书(如本地的自签名服务)会降级到http1.1,firefox不会出现此问题。

启动server push

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

响应

image

image

抓包分析

可以用chrome 内部自带的工具(chrome://net-internals/)查看http2流量,但这个包信息量比较少,结构不如我们熟悉的Fiddler or Wireshark清晰。

Fiddler是直接作为中间代理,可以作为客户端直接与服务端通讯,可以像浏览器那样直接解密https,直接看到https报文,
但是由于受限于.NET Framework暂不支持Http2.

用wireshark直接抓包 https:443端口的流量是这样的:

image

数据被加密了,协议细节完全看不到。
这里介绍了一种方法获取私钥解包。
抓包https包时要把代理关了,不然私钥不是同一个,wireshark不能解包(被这个坑了两小时T T)。

image

image

一个包内有多个不同的Steam ID

image

追踪解密后TCP流可以看到,由于多路复用,各个不同的请求交替传输不同的帧,所以流数据是乱的。但在同一帧内数据还是正常的。

最后

最后,HTTP2有更高的传输速度,更少的资源占用,可以去除各种性能优化tricks(如css sprite,inline-image.)
转向WEB开发的美好未来T.T

参考资料
  • Turn-on HTTP/2 today!
  • Hypertext Transfer Protocol Version 2 (HTTP/2)
  • npm spdy
  • npm spdy push
  • How to create a self-signed SSL Certificate
  • HPACK: Header Compression for HTTP/2
  • 用Node.js创建自签名的HTTPS服务器
  • posted @

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • js图片前端预览之 filereader 和 window.URL.createObjectURL - 冒雨ing

      js图片前端预览之 filereader 和 window.URL.createObjectURL - 冒雨

      2016-06-30 13:00

    • 【小月博客】用HTML5的File API做上传图片预览功能 - 小月博客

      【小月博客】用HTML5的File API做上传图片预览功能 - 小月博客

      2016-06-15 18:00

    • 基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作 - 伍华聪

      基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的

      2016-01-21 17:10

    • Sublime text如何设置快捷键让编写的HTML文件在浏览器预览? - 魔芋铃

      Sublime text如何设置快捷键让编写的HTML文件在浏览器预览? - 魔芋

      2015-11-26 17:20

    网友点评
    0