Node.js 实现一个 HTTP/2 的例子

11 篇文章 0 订阅
9 篇文章 0 订阅

要在前端使用 HTTP/2,通常不需要在 JavaScript 代码中做特殊处理,因为 HTTP/2 是在网络传输层处理的,浏览器会自动处理请求的协议选择。然而,可以通过设置一个简单的项目,使用 HTTP/2 来加载资源,并通过浏览器的开发者工具来查看 HTTP/2 的效果。

示例说明

创建一个简单的 Node.js 服务器,它使用 HTTP/2 提供静态文件。然后在前端 JavaScript 中发起请求来加载一些资源。

1. 创建一个 Node.js HTTP/2 服务器

首先,确保已经安装了 Node.js。接着,创建一个目录来存放项目文件:

mkdir http2-demo
cd http2-demo
npm init -y
npm install express spdy

spdy 是一个 Node.js 模块,帮助我们在 Express 中轻松启用 HTTP/2。

server.js 文件

创建一个简单的 HTTP/2 服务器来提供静态文件服务:

const express = require('express');
const spdy = require('spdy');
const fs = require('fs');
const path = require('path');

const app = express();

// 提供静态文件服务
app.use(express.static(path.join(__dirname, 'public')));

// 设置一个简单的API
app.get('/api/data', (req, res) => {
  res.json({ message: "Hello from HTTP/2!" });
});

// 配置 HTTPS(需要 SSL/TLS 证书)
const options = {
  key: fs.readFileSync('server.key'),
  cert: fs.readFileSync('server.crt')
};

// 启动服务器
spdy.createServer(options, app).listen(3000, (err) => {
  if (err) {
    console.error('Failed to start server:', err);
    return;
  }
  console.log('HTTP/2 server listening on port 3000');
});

注意:需要生成或获取 SSL/TLS 证书server.keyserver.crt`,可以通过自签名证书进行开发测试,或者使用 Let’s Encrypt 等服务获取免费证书。

生成自签名证书(开发用途)

如果没有现成的 SSL/TLS 证书,可以用以下命令生成自签名证书:

openssl req -nodes -new -x509 -keyout server.key -out server.crt -days 365

2. 创建前端页面

public 目录下创建 index.htmlscript.js 文件。

public/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTTP/2 Demo</title>
</head>
<body>
    <h1>HTTP/2 Demo</h1>
    <button id="fetchButton">Fetch Data</button>
    <p id="response"></p>

    <script src="script.js"></script>
</body>
</html>

public/script.js

document.getElementById('fetchButton').addEventListener('click', () => {
    fetch('/api/data')
        .then(response => response.json())
        .then(data => {
            document.getElementById('response').textContent = data.message;
        })
        .catch(error => console.error('Error fetching data:', error));
});

3. 运行服务器

确保所有文件都准备好后,启动服务器:

node server.js

服务器将会在 https://localhost:3000 上运行。

4. 使用浏览器查看效果

打开浏览器并访问 https://localhost:3000。可能需要绕过自签名证书的警告页面。

在页面上点击 “Fetch Data” 按钮,查看来自 /api/data 的数据请求。

验证 HTTP/2

打开浏览器的开发者工具(F12),然后进入 Network 面板。刷新页面,并查看资源加载的协议列,应该能看到 h2,表示资源通过 HTTP/2 协议加载。

总结

这个示例展示了如何设置一个使用 HTTP/2 的服务器,并在前端通过 JavaScript 发起请求。由于 HTTP/2 是在传输层实现的,前端 JavaScript 并不需要对 HTTP/2 进行特殊处理,只要服务器和浏览器支持,它就会自动使用 HTTP/2 进行资源请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值