静态页面

其实就是复制官网的代码

其中证书 是我自己申请的可以用证书 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的更多相关文章

  1. 用nodejs搭建一个简单的服务器

    使用nodejs搭建一个简单的服务器 nodejs优点:性能高(读写文件) 数据操作能力强 官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node -v 如果显示版本号表示安 ...

  2. 从零开始,在windows上用nodejs搭建一个静态文件服务器

    从零开始,在windows上用nodejs搭建一个静态文件服务器 首先安装nodejs: 新建一个node文件夹 下载node.exe到该文件夹 下载npm然后解压到该文件夹 现在node文件夹是这样 ...

  3. 用nodejs搭建一个简单的服务监听程序

    作为一个从业三年左右的,并且从事过半年左右PHP开发工作的前端,对于后台,尤其是对以js语言进行开发的nodejs,那是比较有兴趣的,虽然本身并没有接触过相关的工作,只是自己私下做的一下小实验,但是还 ...

  4. 用nodejs做一个svn密码修改页面

    linux上配置好svn服务后,管理修改密码还得去手工修改passwd这个文件,略麻烦,其实网上应该有配套的web管理修改界面程序.但我想自己用nodejs写一个,因为用node不用配置复杂的服务器. ...

  5. 用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具

    用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具 前言 上周,同事抱怨说 react 怎么不能像 angular 那样,使用命令行工具来生成一个组件.对呀,平时工作时,想要创建 ...

  6. 利用 nodeJS 搭建一个简单的Web服务器(转)

    下面的代码演示如何利用 nodeJS 搭建一个简单的Web服务器: 1. 文件 WebServer.js: //-------------------------------------------- ...

  7. nodejs实现一个文件存储服务

    nodejs实现一个文件存储服务 模拟文件上传下载功能: PUT 上传一个文件,URL表示在服务器上待上传文件的路径. GET 下载一个文件,URL表示在服务器上待下载文件的路径.

  8. nodejs创建一个简单的web服务

    这是一个突如其来的想法,毕竟做web服务的框架那么多,为什么要选择nodejs,因为玩前端时,偶尔想调用接口获取数据,而不想关注业务逻辑,只是想获取数据,使用java或者.net每次修改更新后还要打包 ...

  9. nodejs实现一个简单的爬虫

    nodejs是js语言,实现一个爬出非常的方便. 步骤 1. 使用nodejs的request模块,获取目标页面的html代码:https://github.com/request/request 2 ...

  10. 初识NodeJS,一个基于GoogleV8引擎的Javascript运行环境

    思考 首先我们来思考一个问题:我们都知道几乎所有现代主流浏览器都全面支持了ECMAScript 5.1版标准,而JavaScript的标准是ECMAScript.那么我们就容易认为JavaScript ...

随机推荐

  1. vue3在构建时,使用魔法糖语法时defineProps和defineEmits的注意事项

    在 Vue 3.2+ 版本中,可以使用 <script setup> 替代传统的 script标签来编写组件,它提供了更简洁的语法来编写 Composition API 代码. 在 < ...

  2. MySQL 事务的二阶段提交是什么?

    MySQL 事务的二阶段提交是什么? 二阶段提交(Two-Phase Commit, 2PC)是分布式事务中的一种协调协议,用于确保多个资源(如数据库或数据节点)在事务提交时保持一致性.MySQL 在 ...

  3. c#几种场景获取程序运行目录

    控制台.app等桌面应用程序(兼容系统自启) 1 System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.File ...

  4. Packet Chasing:通过缓存侧信道监视网络数据包

    摘要 本文介绍了一种对网络的攻击--Packet Chasing,这种攻击不需要访问网络,无论接收数据包的进程的特权级别如何,都能发挥作用.一个间谍进程可以很容易地探测和发现网络驱动程序使用的每个缓冲 ...

  5. Java单例模式:从实战到面试的深度解析

    结论先行 饿汉式:线程安全但可能造成资源浪费,推荐在初始化成本低的场景使用 懒汉式:需要解决线程安全问题,推荐使用双重检查锁+volatile优化 静态内部类:最佳实践方案,完美平衡延迟加载与线程安全 ...

  6. <HarmonyOS第一课01>HarmonyOS介绍

    视频链接: https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717496599725471?ha_sou ...

  7. rider的xamarin环境安装

    自从用上rider后,vs就再也没有安装过了.最近要做apk开发,就安装xamarin环境,但是总是报错: Show Log->idea.log 发现下面错误: ERROR | Environm ...

  8. 解决【Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modul】报错问题

    参考: https://blog.csdn.net/weixin_36146275/article/details/77447659

  9. 信息资源管理综合题之“ITSM(IT服务管理)和ITIL(基础架构标准库)内容”

    一.在百度百科中,关于IT服务管理有如下描述:专家的研究和大量企业时间表明,在IT项目的生命周期中,大约80%的时间与IT项目运营维护有关,而该阶段的投资仅占整个IT投资的20%,形成了典型的&quo ...

  10. SQL 强化练习 (九)

    这两天在写一个权限的sql, 涉及 3 张表, 然后做了一个 union all 的操作, 感觉效率有点问题, 写套娃, 改来改去的做优化. 关键数据又不能贴, 嗯, 还是明天搞个假数据来说明这个关系 ...