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 ...
随机推荐
- 2021年扩展DevOps的6种方法
2021年扩展DevOps的6种方法 加强devops流程的自动化 为了满足快速.高质量应用程序交付的需求,现代软件团队需要一种超越常规性能测试的方法.在这里,以devops为中心的方法可以提供更快. ...
- CH182F7与LAN8720A对比
1.CH182F7简介 CH182F7是一款支持Auto-MDIX的工业级10/100M以太网PHY收发器.内部包括物理编码子层(PCS).物理介质接入层(PMA).双绞线物理介质相关子层(TP-PM ...
- 探秘Transformer系列之(25)--- KV Cache优化之处理长文本序列
探秘Transformer系列之(25)--- KV Cache优化之处理长文本序列 目录 探秘Transformer系列之(25)--- KV Cache优化之处理长文本序列 0x00 概述 0x0 ...
- SynchronousQueue的put方法底层源码
一.SynchronousQueue的put方法底层源码 SynchronousQueue 的 put 方法用于将元素插入队列.由于 SynchronousQueue 没有实际的存储空间,put 方法 ...
- Cursor怎么使用,3分钟上手Cursor:比ChatGPT更懂需求,用聊天的方式写代码,GPT4、Claude 3.5等先进LLM辅助编程
前言 在人工智能工具井喷的今天,大家早已习惯用AI辅助编程,但大多数工具要么停留在"问答式"交互,要么对复杂代码逻辑束手无策.而Cursor--这款专为开发者设计的AI编程工具,凭 ...
- 北京市第六届信息通信行业网络安全技能大赛(初赛)-CTF夺旗阶段 EZRSA writeup
题目EZRSA EZRSA.py from Crypto.Util.number import * import gmpy2 from flag import m p = getPrime(1024) ...
- Web前端杂乱知识复习
OSI OSI是Open System Interconnect的缩写,意为开放式系统互联.其各个层次的划分遵循下列原则: (1)同一层中的各网络节点都有相同的层次结构,具有同样的功能. (2 ...
- DeepSeek+Coze实战:如何从0到1打造一个热点监控智能体
大家好,我是汤师爷,专注AI智能体分享~ 短视频小白经常会遇到这样的困扰. 每天花大量时间刷视频,想要找到你所在赛道的爆款内容,却总是难以系统地整理和分析? 想要批量获取某个关键词的爆款视频数据,但是 ...
- idea格式化代码快捷键
Ctrl+Alt+L Ctrl+Shift+Alt+L
- Mybatis 框架课程第一天
目录 1 框架概述 1.1 MyBatis 框架概述 1.2 JDBC 编程的分析 1.2.1 jdbc 程序的回顾 1.2.2 jdbc问题分析 2 Mybatis框架快速入门 2.1 Mybati ...