忍了一年多了,我最终打算对http-server进行魔改。
本文面向的读者朋友:
前端开发工程师、测试工程师、其它需要内网静态文件服务的软件开发人员。
看过我以前文章的老铁都知道,傲天君是一名前端开发工程师。做前端吗,经常会做一些demo页面,然后把demo页面发给产品,测试以及领导看看。
所以我经常使用一款工具就是http-server
,它是一款非常火爆的nodejs库,可以在命令行快速地搭建一个http/https静态文件服务
。
因为我做的开发业务大部分涉及webRTC
方面,所以我需要启用了https的静态文件服务。这是因为浏览器的安全限制。要求涉及请求用户电脑摄像头、麦克风、桌面视频流等等浏览器权限时候,你的网页必须是https开头的,也就是不能是http开头的。
当然你的https证书是不是有问题,浏览器不关心。自签名的证书同样是允许的,只要测试用户接受安全警告就可以了。(如下图所示,点击继续访问,表示我明白并接受这个风险)
自签名or证书不正确的https网站说个题外话,我记得我上大学那几年(12-16年),咱们的12306网站一直都有这个证书问题,我实在搞不明白为啥子12306就是不修复呢?
好吧,回到http-server主题,那么我为什么要魔改它呢?
因为它的https启动方式实在是太麻烦了!
我先上个命令行代码给大家感受一下:
http-server -p 8080 -S -K path/to/your/key.pem -C path/to/your/cert.pem
我知道各位老铁都知道各个参数的含义,但是我还是想解释一下各个参数:
-p 8080 表示静态文件服务占用本机的8080端口
-S 表示开启https服务,不指定该参数的话,默认是http服务
-K 与 -C 就是指定证书的私钥与密钥了
我第一次使用的时候,以为 -K
与-C
参数可以不设置,然后http-server
给我一次重拳出击!
难受!http-server必须要求我提供证书的私钥与密钥!
我当时就纳闷了,你这个工具本来就是开发测试阶段使用的,一般情况哪来的证书啊?就算有证书也都是自签名的证书,你http-server
就不能在内部自己生成一个自签名的证书吗?
还别说,关于这个问题还真有老铁在http-server
的讨论里面反馈,并且有老铁还把代码写好了,提交给官方组织,但是!!官方认为http-server
不应该自动创建自签名证书!! (当然这个老铁写的代码质量也有点问题)
用我的Google翻译拙劣地美化一下:
难受啊!没办法了,我傲天君决定魔改你们的http-server
了。
是的,当我写这篇文章的时候,我已经把代码写好了,它就是http-server-v2:
https://github.com/AJLoveChina/http-server-v2github.com
http-server-v2
的使用参数与http-server
完全一模一样!!
所以你不用担心有额外的学习成本。
但是http-server-v2
可以帮你自动生成自签名证书,如果你没有指定证书的话!
我们来看一看怎么使用的!
(Tip : 当各位老铁看到这篇文章的时候,项目已经更名为hs2
,应官方的要求,但是功能都一样)
安装
没有问题,这很简单。
对于非前端玩家,需要安装nodejs[1],npm是nodejs的包管理工具,nodejs在windows下安装非常简单,傻瓜式,path自动添加到系统变量里面,安装后开箱即用。
使用
hs2 -S #一个https服务就诞生了!
hs2 -p 8080 #一个简单的8080端口的http服务, 完全向后兼容 http-server
这里解释一下,为什么使用hs2
而不是以前的http-server
or hs
命令?
很简单, http-server-v2决定使用 hs2 作为命令名称。这样你就可以在你的电脑既安装http-server,又安装 http-server-v2
结尾
希望这个工具各位开发者老铁会喜欢,关于实现的细节也很简单。
就是当-S模式的使用,判断有没有可用的证书,如果没有可用的证书就自动创建一个自签名证书。自签名证书的生成算法使用了第三方库 selfsigned 。我看了它们的代码,优雅&&简洁。
代码参考了著名的webpack-dev-server
,搞webpack那一套的老铁都知道这个插件,它就支持自动生成自签名证书然后提供https服务。我看了他们的代码,才知道原来有selfsigned这个工具,我以前还误以为dev-server自己实现了一套生成证书算法呢。
类似Tomcat
这样的容器也能实现http-server-v2
的部分功能,但是没有http-server-v2
方便,因为Tomcat
需要把文件放到它的webapps目录下,而http-server-v2
是非侵入式的,命令行切换到需要静态文件服务的文件夹,一行命令就服务!
TODO
- 支持detached mode,即可以后台运行,计划使用pm2。方便在linux机器上面使用。
- 搞个帅气一点的LOGO,但是我不会UI设计啊。。。
更新
昨天官方成员BigBlueHat给我评论,建议我不要使用http-server-v2
这样的名称,因为这看起来会让别人觉得它是http-server
官方的一个项目,那好吧~ 换个名字吧,就叫hs2
吧
So 就是这样, bye~
霸都丶傲天 write on 2020年3月17日
题外话
静态文件服务就是提供静态文件访问的服务。什么是静态文件?你电脑上的任何文件都是静态文件,用这个服务可以让内网中的其它用户通过浏览器访问你电脑的文件,也可以部署你的html代码(最常用)。
比如,你想发送一个doc文档给你的同事小张,那么你只要在这个doc文档的所在目录运行hs2
,然后hs2会在控制台提示你浏览器访问该文件的网址是多少。之后你把这个网址发送给小张就可以了,他可以享受内网的飞速下载(一般都是10MB/s以上的下载速度)
如果你觉得发送一个doc文档用QQ就可以完成,那么对于很大的文件,QQ可能就不是那么好用了。而且许多大公司不允许使用QQ发送文件,因为这样不安全。一般这样的大公司诸如华为、滴滴、腾讯都有自己的内部腾讯软件。比如华为的Espace,腾讯的腾讯通。我都用过,它们最大的问题就是传输速度极慢,让人发指。尤其是腾讯通,我都搞不明白你的QQ都支持内网文件传输,为什么你的腾讯通都不支持,而且腾讯通还是企业版QQ。。。
相关文章
霸都丶傲天: 内部网络最快无限制的文件传输共享工具,比扣扣vx还要方便, unbelievable,盘它!zhuanlan.zhihu.com
参考
- ^nodejs官方下载地址 https://nodejs.org/en/download/