本文使用node.js创建一个可以调试和验证http2服务的代码。

首先创建一个npm环境,并按照http2模块

$npm init
$npm i http2 --save

其次创建证书(主流浏览器仅仅支持tls加密传输,因此要求服务器必须使用证书):

$openssl req -new -newkey rsa:2048 -nodes -keyout localhost.key -out localhost.csr

$openssl x509 -req -days 365 -in localhost.csr -signkey localhost.key -out localhost.crt

然后执行如下代码:

var https = require('http2');
var fs = require('fs');

var options = {
  key: fs.readFileSync('./localhost.key'),
  cert: fs.readFileSync('./localhost.crt')
};

require('http2').createServer(options, function(request, response) {
  response.end('Hello HTTP2.');
}).listen(8080);

使用curl验证协议:

curl  https://localhost:8080 -k -I

输出:

HTTP/2 200 
date: Tue, 23 Aug 2016 09:18:35 GMT

curl的参数-I表示仅仅显示HTTP header,-k表示忽略因为服务器使用自签名证书而发出的警告。输出中的HTTP/2指明协议为HTTP/2。如果遇到问题,参考文档https://simonecarletti.com/bl...

打开浏览器,访问https://localhost:8080,忽略安全警示,然后看到输出:

Hello HTTP2.

另外一个验证的方法,是打开浏览器的devtools,查看protocols,看到h2。这说明http2已经在本次通讯中得到启用。

我使用的环境为:

$ node -v
v5.0.0
curl --version
curl 7.50.1 。。。。。

版本很重要。不对的版本可能会有不少问题,请留意。

关于

作者:刘传君
创建过产品,创过业。不好动,读书机器。
可以通过 1000copy#gmail.com 联系到我

出品

http小书 http://www.ituring.com.cn/boo...
Git小书 http://www.ituring.com.cn/boo...


Reco
4.6k 声望541 粉丝

敢作敢为