nodejs起一个http2
静态页面
其实就是复制官网的代码
其中证书 是我自己申请的可以用证书 dingshaohua.com

import fs from "fs";
import http2 from "node:http2";
const server = http2.createSecureServer({
key: fs.readFileSync("/etc/letsencrypt/live/dingshaohua.com/privkey.pem"),
cert: fs.readFileSync("/etc/letsencrypt/live/dingshaohua.com/fullchain.pem"),
});
server.on('stream', (stream, headers) => {
stream.respond({
'content-type': 'text/html; charset=utf-8',
':status': 200,
});
stream.end('<h1>Hello World</h1>');
});
server.listen(3002);
最终效果如下,访问:https://dingshaohua.com:3002

可以看到http2的接受请求处理 都在 server.on('stream',...)中,这正反映了 http2的数据都是流的本质
一个完整例子
import fs from "fs";
import http2 from "node:http2";
const server = http2.createSecureServer({
key: fs.readFileSync("/etc/letsencrypt/live/dingshaohua.com/privkey.pem"),
cert: fs.readFileSync("/etc/letsencrypt/live/dingshaohua.com/fullchain.pem"),
});
server.on("stream", (stream, headers) => {
const method = headers[":method"];
const path = headers[":path"];
if (method === "GET" && path === "/") {
stream.respond({
"content-type": "text/html; charset=utf-8",
":status": 200,
});
stream.end("<h1>Hello World</h1>");
} else if (method === "GET" && path === "/users") {
const params = { name: "张三" };
stream.respond({ ":status": 200, "content-type": "application/json" });
stream.end(JSON.stringify(params));
} else {
stream.respond({
"content-type": "text/html; charset=utf-8",
":status": 404,
});
stream.end("<h1>NOT FOUND</h1>");
}
});
server.listen(3002);
http/2特性
服务器推送
这个忽略吧,目前所有浏览器为了安全考虑 都禁止了 服务器流的推送,以下测试代码 经过测试chrome和firefox 判断将永远过不去。
// 监听流事件以处理 HTTP/2 流
server.on("stream", (stream, headers) => {
// 检查是否支持推送
if (!stream.pushAllowed) {
const msg = "客户端不支持服务器主动推送(流)";
console.log(msg);
}}
// 向客户端推送
setTimeout(() => {
stream.pushStream({ ":path": "/subscribe" }, (pushStream) => {
pushStream.respond({
"content-type": "application/json",
":status": 200,
});
pushStream.end(JSON.stringify({ name: "张三" }));
});
},3000);
});
支持
express暂不支持http2
nginx也不支持http2的代理
nodejs起一个http2的更多相关文章
- 用nodejs搭建一个简单的服务器
使用nodejs搭建一个简单的服务器 nodejs优点:性能高(读写文件) 数据操作能力强 官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node -v 如果显示版本号表示安 ...
- 从零开始,在windows上用nodejs搭建一个静态文件服务器
从零开始,在windows上用nodejs搭建一个静态文件服务器 首先安装nodejs: 新建一个node文件夹 下载node.exe到该文件夹 下载npm然后解压到该文件夹 现在node文件夹是这样 ...
- 用nodejs搭建一个简单的服务监听程序
作为一个从业三年左右的,并且从事过半年左右PHP开发工作的前端,对于后台,尤其是对以js语言进行开发的nodejs,那是比较有兴趣的,虽然本身并没有接触过相关的工作,只是自己私下做的一下小实验,但是还 ...
- 用nodejs做一个svn密码修改页面
linux上配置好svn服务后,管理修改密码还得去手工修改passwd这个文件,略麻烦,其实网上应该有配套的web管理修改界面程序.但我想自己用nodejs写一个,因为用node不用配置复杂的服务器. ...
- 用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具
用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具 前言 上周,同事抱怨说 react 怎么不能像 angular 那样,使用命令行工具来生成一个组件.对呀,平时工作时,想要创建 ...
- 利用 nodeJS 搭建一个简单的Web服务器(转)
下面的代码演示如何利用 nodeJS 搭建一个简单的Web服务器: 1. 文件 WebServer.js: //-------------------------------------------- ...
- nodejs实现一个文件存储服务
nodejs实现一个文件存储服务 模拟文件上传下载功能: PUT 上传一个文件,URL表示在服务器上待上传文件的路径. GET 下载一个文件,URL表示在服务器上待下载文件的路径.
- nodejs创建一个简单的web服务
这是一个突如其来的想法,毕竟做web服务的框架那么多,为什么要选择nodejs,因为玩前端时,偶尔想调用接口获取数据,而不想关注业务逻辑,只是想获取数据,使用java或者.net每次修改更新后还要打包 ...
- nodejs实现一个简单的爬虫
nodejs是js语言,实现一个爬出非常的方便. 步骤 1. 使用nodejs的request模块,获取目标页面的html代码:https://github.com/request/request 2 ...
- 初识NodeJS,一个基于GoogleV8引擎的Javascript运行环境
思考 首先我们来思考一个问题:我们都知道几乎所有现代主流浏览器都全面支持了ECMAScript 5.1版标准,而JavaScript的标准是ECMAScript.那么我们就容易认为JavaScript ...
随机推荐
- should contain指令的用法,校验结果
上图案例 商品添加后,匹配"商品名称","现价","库存" 首先获取"商品名称","现价",&quo ...
- ADTF: 助力自动驾驶系统开发的强大工具箱!
在过去十年中,自动驾驶和高级驾驶辅助系统(AD/ADAS)软件与硬件的快速发展对多传感器数据采集的设计需求提出了更高的要求.然而,目前仍缺乏能够高质量集成多传感器数据采集的解决方案. 康谋ADTF正是 ...
- .NET 原生驾驭 AI 新基建实战系列(四):Qdrant ── 实时高效的向量搜索利器
向量数据库作为一种专为现代AI应用设计的新型存储技术,能够高效地管理和检索高维数据,成为智能应用开发中的关键基础设施.本文将深入探讨 Qdrant 这个开源.高性能的向量数据库,重点介绍其如何与 .N ...
- Streamlit快速入门指南
theme: orange Streamlit是一个Python库,允许您创建交互式的数据科学和机器学习Web应用程序. Streamlit介绍 Streamlit是一个Python库,允许您创建交互 ...
- 『Plotly实战指南』--交互功能基础篇
在数据可视化领域,静态图表早已无法满足用户对深度分析与探索的需求. Plotly作为新一代交互式可视化工具,通过其强大的交互功能重新定义了"数据叙事"的边界. 通过精心设计的交互功 ...
- Kreuzberg:本地OCR+多格式解析!Kreuzberg如何用Python暴力提取30+文档格式?程序员看完直呼内行!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 我们经常需要从各种不同类型的文档中提取文本内容,无论是办公文档.图像还是PDF文件.而Kre ...
- 【工具】VS Code Counter|除了Gitstats之外的Github一键统计代码行数工具
需求: 1)被要求统计代码行数: 2)不想打开Linux,懒得下载Windows版本GitStats: 3)打开了Linux但也不记得find命令行怎么用: 4)打开了Linux,装好了Gitstat ...
- Gin RBAC 权限基础实现
RBAC (基于角色的访问控制) 是一种广泛应用的权限管理模型, 通过 角色 将 用户 和 权限 解耦, 简化权限分配管理. 用户 (User): 系统的使用者 权限 (Permission): 对资 ...
- C#之并发字典
internal class Program { const string Item = "Dictionary item"; const int Iterations = 100 ...
- Elimination Game——LeetCode进阶路
原题链接https://leetcode.com/problems/elimination-game/ 题目描述 There is a list of sorted integers from 1 t ...