From fce36595f44a0d55045088bcae0f2daf6c38ed43 Mon Sep 17 00:00:00 2001 From: yutent Date: Wed, 21 Feb 2024 14:52:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0https=E7=9A=84=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++++++ index.js | 53 ++++++++++++++++++++++++++++++++++++------------ package.json | 23 ++++++++++++++++++++- test/.httpserver | 3 ++- test/index.html | 2 +- 5 files changed, 72 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 7153955..094a88c 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,8 @@ > 在项目根目录中放置 `.httpserver`文件, 并配置好之后, 重启或重新加载窗口, 以启动服务。 +## 插件通用配置 +> 通用配置可以设置`domain`,`key`,`cert`3个字段, 可省的每个项目配置一次。通用配置优先级低于项目的配置。 ## .httpserver 文件 > 使用`.httpserver`来配置web服务器信息, 该文件应为一个json格式的。 @@ -30,6 +32,11 @@ { "enabled": true, // 这里配置为 true 才会启动web服务 "port": 23333, // 【可选】 默认使用 23333 端口, 如果被使用了, 会向上查找可用端口 + "https": true, // 【可选】 是否使用https + "http2": true, // 【可选】 是否使用http2, 等价于https, 用哪个都可以 + "domain" "", // 【可选】有域名, 就会用域名打开页面, 没有就用IP + "key": "", // 【可选】域名证书的绝对路径(仅当开启https/2时需要) + "cert": "", // 【可选】域名证书的绝对路径(仅当开启https/2时需要) "root": ".", // 【可选】 web服务的根目录, 默认为当前项目的根目录, 可填写相对项目根目录的路径。 "headers": { // 【可选】支持注入一些头信息, 方便特殊需要的调试 "cache-control": "no-store" // 默认为 no-store diff --git a/index.js b/index.js index 0ed717c..af6b5a7 100644 --- a/index.js +++ b/index.js @@ -8,6 +8,7 @@ const vsc = require('vscode') const { join, basename } = require('path') const { parse } = require('url') const http = require('http') +const http2 = require('http2') const fs = require('iofs') const { WebSocketServer } = require('ws') @@ -42,6 +43,7 @@ const MIME_TYPES = { other: 'application/octet-stream' } +const SERVER_OPTIONS = { allowHTTP1: true } const COMMON_HEADERS = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': '*', @@ -61,6 +63,8 @@ let port = 23333 let baseUrl = 'http://127.0.0.1:' + port let server let ws = null +let domain +let isHttps = false const HMR_SCRIPT = `