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了。
请求头和响应头:
说明:新版的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
响应
抓包分析可以用chrome 内部自带的工具(chrome://net-internals/)查看http2流量,但这个包信息量比较少,结构不如我们熟悉的Fiddler or Wireshark清晰。
Fiddler是直接作为中间代理,可以作为客户端直接与服务端通讯,可以像浏览器那样直接解密https,直接看到https报文,
但是由于受限于.NET Framework暂不支持Http2.
用wireshark直接抓包 https:443端口的流量是这样的:
数据被加密了,协议细节完全看不到。
这里介绍了一种方法获取私钥解包。
抓包https包时要把代理关了,不然私钥不是同一个,wireshark不能解包(被这个坑了两小时T T)。
一个包内有多个不同的Steam ID
追踪解密后TCP流可以看到,由于多路复用,各个不同的请求交替传输不同的帧,所以流数据是乱的。但在同一帧内数据还是正常的。
最后最后,HTTP2有更高的传输速度,更少的资源占用,可以去除各种性能优化tricks(如css sprite,inline-image.)
转向WEB开发的美好未来T.T
posted @