静态页面

其实就是复制官网的代码

其中证书 是我自己申请的可以用证书 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. 0x04 数学知识

    数学知识 数论 质数 试除法判定质数 \(O(\sqrt n)\) bool is_prime(int x) { if (x < 2) return false; for (int i = 2; ...

  2. springmvc实现转发和重定向

    一. @RequestMapping("/testVoid") public String testVoid(HttpServletRequest request){ //转发方式 ...

  3. 使用PyMuPDF对pdf文件插入文字时 遇到配置本地的字体文件缺仍然使用默认Helvetica字体问题

    背景 昨天收到的新需求,一份文件从其他部门发起,进行一些文字填写后盖章,再到我们部门,我们接收到的是pdf文件,所以需要在pdf文件中进行修改,插入当日日期等文字.但有要求字体必须和原文档字体相同. ...

  4. 编译执行与解释执行的区别是什么?JVM 使用哪种方式?

    编译执行与解释执行的区别 1. 编译执行(Compiled Execution) 定义: 将源代码一次性翻译为机器码(目标代码),生成可直接运行的二进制文件. 特点: 翻译只发生一次,生成的目标代码可 ...

  5. JDK的SPI有什么缺陷?dubbo做了什么改进?

    JDK的SPI机制的缺点 ⽂件中的所有类都会被加载且被实例化.这样也就导致获取某个实现类的方式不够灵活,只能通过 Iterator 形式获取,不能根据某个参数来获取对应的实现类.如果不想用某些实现类, ...

  6. React项目报错:Element type is invalid: expected a string可能的原因

    React项目报错:Element type is invalid: expected a string  起因:React使用Antd组件库,因为某些原因实在用不下去了,代码不变直接改成Tdesig ...

  7. Linux 下搭建 Spark3 + Jupyter 环境

    最近想着来玩一玩大数据, 前段时间集中过了一遍 java, 最近又看了一些基础的 scala, 我感觉吧, 我都不想学. 还是觉得用 sql, javascript, python 这种脚本语言操作起 ...

  8. 10个让你成为CSS画家的技巧,不容错过

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  9. C#之结构

    结构是用户定义的数据类型,与类非常相似,它们有数据成员和函数成员,但与类最重要的区别是:类是引用类型,而结构是值类似,结构是隐式密封的,这意味这它们不能被派生,所以结构类型不能为null,两个结构变量 ...

  10. 洛谷 P3268 [JLOI2016]圆的异或并

    洛谷 P3268 [JLOI2016]圆的异或并 题目描述 在平面上有两两不相交的\(n\)个圆,即其关系只有相离和包含.求这些圆的异或面积并. 异或面积并为:当一片区域被奇数个圆包含则计算其面积,否 ...