实验十 HTTP协议

学习网址:HTTP2 | Node.js 中文文档 | Node.js 中文网

(1)在Linux虚拟机上创建koa 脚手架项目,koa2 -e myhttp2 && cd myhttp2

安装项目依赖,npm i

运行 wd18,npm start

浏览器访问 wd18,通过 Network 面板,确认 HTTP 协议版本

创建证书文件夹,mkdir key && cd key

创建自签名证书,注意,给证书提供一些有用信息

openssl genrsa 1024 > key.pem

openssl req -x509 -new -key key.pem > key-cert.pem

修改项目代码

// 原代码

var http = require('http');

// 改为

const http = require('http2');

const fs = require('fs');

// 原代码

var server = http.createServer(app.callback());

// 改为

const server = http.createSecureServer({

  key: fs.readFileSync('./key/key.pem'),

  cert: fs.readFileSync('./key/key-cert.pem')

}, app.callback());

浏览器访问koa2项目,通过 Network 面板,确认 HTTP 协议版本

(2)使用koa2搭建静态网站,给网站页面与图片资源添加cache-control缓存处理,让资源在100秒内使用缓存资源,100秒后重新从服务端获取资源。可以考虑使用cache-control与if-modified-since  last-modified字段

目录结构:

bin/www的代码段

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('demo:server');
var http = require('http2');
const fs = require('fs');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
// app.set('port', port);

/**
 * Create HTTP server.
 */

// var server = http.createServer(app.callback());

const server = http.createSecureServer({
  key: fs.readFileSync("./key/key.pem"),
  cert: fs.readFileSync("./key/key-cert.pem")
},app.callback());

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

导入我们的证书

key/key-cert.pem

-----BEGIN CERTIFICATE-----
MIICUjCCAbugAwIBAgIJAKalvICyyvAcMA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNV
BAYTAlhYMRUwEwYDVQQHDAxEZWZhdWx0IENpdHkxHDAaBgNVBAoME0RlZmF1bHQg
Q29tcGFueSBMdGQwHhcNMjIwMzE2MDg1MTQxWhcNMjIwNDE1MDg1MTQxWjBCMQsw
CQYDVQQGEwJYWDEVMBMGA1UEBwwMRGVmYXVsdCBDaXR5MRwwGgYDVQQKDBNEZWZh
dWx0IENvbXBhbnkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDR6aOz
jVahJrS3FjuQJfYnupkDsLTkgvY30EZZj94bPvZlSeMG0LPL1uvrDpObZCODQrkp
d7cTMlTjCKZ3NbHKShKjL6L9tyvrOZ+xMmDrw3t5pVbHGd0VhFi1GgxlN5yCxg8Z
zJ6qLgulLdlNmQ0q/+6rrZzJ2sqBEKNDTv+I7QIDAQABo1AwTjAdBgNVHQ4EFgQU
X1aZMmyNH4qUyunbaGBFjVyp068wHwYDVR0jBBgwFoAUX1aZMmyNH4qUyunbaGBF
jVyp068wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQB/yuEKLknzQMjD
FDxIWIyXgjlEjiI+ArMz7IU5FOHwRt1eI3Etg8D9IfoD3i/RNLP0Lvxv4cmQ+Ytb
L5k+MPTeDeisUsz4/Ev0J706r9Qlr86vM6iRjJJZ2YjmY9iVjYdgCauInwTpY/lQ
c0l6Kpmr6kgOOFWUGfKk0mciHGsLmw==
-----END CERTIFICATE-----

key/key.pem

-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDR6aOzjVahJrS3FjuQJfYnupkDsLTkgvY30EZZj94bPvZlSeMG
0LPL1uvrDpObZCODQrkpd7cTMlTjCKZ3NbHKShKjL6L9tyvrOZ+xMmDrw3t5pVbH
Gd0VhFi1GgxlN5yCxg8ZzJ6qLgulLdlNmQ0q/+6rrZzJ2sqBEKNDTv+I7QIDAQAB
AoGADMrqWRTyBJwxQz8tnhlSKRWsIZdxTsPUcY5V2ztzU8HAjme0WEP70R5l/ktD
H6M4rtUwJ6DOHXNhzPxH+Nfi387KC/Uj2Hpv3JU6YaFZqOe3NGfWI91kdCFVu4et
oNdEFIQHZu9q1lLGZzmk31zX0gS35p9sWu2+3JmF0FKwEsECQQD9UYr15bGZfDc+
XZzglRJYzIRfV2h4qDmYaACdB86RhfBOUMgwu5K+rCVLQmFxLe08wj82TOtwOOGq
EuxaMIH1AkEA1CJ5EBbtnsESY6xLtz3sjrLLzPL0QpSFZ8hlsBen5b2e5TmT9cOz
eEzIkS5hmR5Bs6rdD+0jYJVRb2Hxpvh4GQJBAM2j7pzj1CL3NZmJQRsHqRcxH5yO
Rp78YZUZiLXxan20L3pEFd+JxfzHnpbT0mqgj+AtCEe6db5qTrdUGU615ikCQQCH
qDvvFBqE6UcPQoFw/0KlxqUZvUyCv2PIiJiu0ZHnEynnwLhj8/BzP/cLELQNLRIr
CVsw8h8rhpF7PxFAC6kRAkEApinD2WI3nYO7rlqy6xiLt7bP/wAzgTkl7V87o9iK
YYI8YfgmQETC86fV+O+qMzZSXLTpy9ubCC9ZDXeO4ERXZg==
-----END RSA PRIVATE KEY-----

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值