44个版本
0.8.9 | 2024年6月21日 |
---|---|
0.8.8 | 2023年11月15日 |
0.8.6 | 2023年7月25日 |
0.8.5 | 2022年10月17日 |
0.0.8 | 2017年12月16日 |
#92 in HTTP服务器
每月187次下载
1.5MB
3.5K SLoC
http-server
简单且可配置的命令行HTTP服务器
安装
cargo install http-server
验证安装成功。
http-server --help
预期以下输出
USAGE:
http-server [FLAGS] [OPTIONS] [root-dir]
FLAGS:
--cors Enable Cross-Origin Resource Sharing allowing any origin
--graceful-shutdown Waits for all requests to fulfill before shutting down the server
--gzip Enable GZip compression for HTTP Responses
--help Prints help information
-l, --logger Prints HTTP request and response details to stdout
-q, --quiet Turns off stdout/stderr logging
--spa Route non-existent files to /index.html
--tls Enables HTTPS serving using TLS
-i, --index Route directories to index.html if present
-V, --version Prints version information
OPTIONS:
-c, --config <config> Path to TOML configuration file
-h, --host <host> Host (IP) to bind the server [default: 127.0.0.1]
--password <password> Specifies password for basic authentication
-p, --port <port> Port to bind the server [default: 7878]
--proxy <proxy> Proxy requests to the provided URL
--tls-cert <tls-cert> Path to the TLS Certificate [default: cert.pem]
--tls-key <tls-key> Path to the TLS Key [default: key.rsa]
--tls-key-algorithm <tls-key-algorithm> Algorithm used to generate certificate key [default: rsa]
--username <username> Specifies username for basic authentication
ARGS:
<root-dir> Directory to serve files from [default: ./]
如果您发现此输出已过时,请毫不犹豫地在此处提交PR。
配置
在没有提供选项或标志的情况下运行服务器时,将使用一组默认配置。您始终可以通过创建自己的配置(使用配置TOML文件)或通过提供使用部分中描述的CLI参数来更改此行为。
名称 | 描述 | 默认 |
---|---|---|
主机 | 绑定服务器的地址 | 127.0.0.1 |
端口 | 绑定服务器的端口 | 7878 |
根目录 | 从该目录提供文件的目录 | CWD |
文件资源管理器UI | 配置为根目录的目录的文件资源管理器UI | 启用 |
配置文件 | 指定配置文件。 示例 | 禁用 |
HTTPS(TLS) | HTTPS安全连接配置。请参阅TLS(HTTPS)参考 | 禁用 |
CORS | CORS(跨源资源共享)头部支持。请参阅CORS参考 | 禁用 |
压缩 | 为HTTP响应体提供GZip压缩。请参阅压缩参考 | 禁用 |
安静 | 运行时不要打印服务器详细信息。这不包括任何日志记录功能。 | 禁用 |
索引 | 如果存在,将路由目录到index.html | 禁用 |
SPA | 将不存在的文件路由到/index.html | 禁用 |
基本认证 | 使用基本认证授权请求。请参阅基本认证 | 禁用 |
记录器 | 将HTTP请求和响应详细信息打印到stdout | 禁用 |
使用方法
http-server [FLAGS] [OPTIONS] [root-dir]
标志
标志不包含任何值。例如
http-server --help
名称 | 短 | 长 | 描述 |
---|---|---|---|
跨源资源共享 | 不适用 | --cors |
启用跨源资源共享,允许任何来源 |
GZip压缩 | 不适用 | --gzip |
启用响应的GZip压缩 |
优雅关闭 | 不适用 | --graceful-shutdown |
在关闭服务器之前等待所有请求完成 |
帮助 | 不适用 | --help |
打印帮助信息 |
记录器 | -l |
--logger |
将HTTP请求和响应详情打印到stdout |
版本 | -V |
--version |
打印版本信息 |
安静 | -q |
--quiet |
不要将输出打印到控制台 |
索引 | -i |
--index |
如果存在,将路由目录到index.html |
SPA | 不适用 | --spa |
将不存在的文件路由到/index.html |
选项
选项接受一个值,并且也支持默认值。
http-server --host 127.0.0.1
名称 | 短 | 长 | 描述 | 默认值 |
---|---|---|---|---|
主机 | -h |
--host |
绑定服务器的地址 | 127.0.0.1 |
端口 | -p |
--port |
绑定服务器的端口 | 7878 |
配置文件 | -c |
--config |
配置文件。 示例 | 不适用 |
TLS | 不适用 | --tls |
启用TLS以进行HTTPS连接。需要证书和密钥。 参考 | 不适用 |
TLS证书 | 不适用 | --tls-cert |
TLS证书文件路径。 取决于 --tls |
cert.pem |
TLS密钥 | 不适用 | --tls-key |
TLS密钥文件路径。 取决于 --tls |
key.rsa |
TLS密钥算法 | 不适用 | --tls-key-algorithm |
用于生成证书密钥的算法。 取决于 --tls |
rsa |
用户名 | 不适用 | --username |
用于基本身份验证的用户名 | 不适用 |
密码 | 不适用 | --password |
用于基本身份验证的密码。 取决于 --username |
不适用 |
代理 | 不适用 | --proxy |
将请求代理到提供的URL | 不适用 |
请求处理器
此HTTP代理支持不同的 请求处理器,这些处理器确定每个传入HTTP请求的处理方式。它们不能组合使用,您必须根据您的需求选择一个。
文件服务器处理器
从提供的目录中提供文件。导航范围限定在指定的目录中。如果没有提供目录,将使用当前工作目录。
这是HTTP服务器的默认行为。
代理处理器
将请求代理到提供的URL。提供的URL用作传入请求的基本URL。
参考
以下是一些关于此HTTP服务器支持的功能的相关细节,可能对用户有所帮助。
压缩
尽管支持压缩,但默认情况下,服务器不会压缩任何HTTP响应内容。您必须在配置文件或命令行中指定您要使用的压缩配置。
截至今天,服务器仅支持GZip算法的压缩,但计划也支持brotli。
以下MIME类型永远不会被压缩
application/gzip
application/octet-stream
application/wasm
application/zip
image/*
video/*
配置文件的压缩部分
由于计划支持其他压缩算法,配置文件已支持压缩设置。
[compression]
gzip = true
--gzip
标志
在执行服务器时提供--gzip
参数。
http-server --gzip
TLS (HTTPS)
此HTTP服务器支持的TLS解决方案是用rustls crate和hyper-rustls构建的。
当运行TLS支持时,您需要
- 证书
- 与证书匹配的RSA私钥
生成证书和密钥的脚本在此处可用:tls-cert.sh。此脚本依赖于 openssl
,请确保您已将其安装在系统上。
按照以下方式运行 http-server
http-server --tls --tls-cert <PATH TO YOUR CERTIFICATE> --tls-key <PATH TO YOUR KEY> --tls-key-algorithm pkcs8
跨源资源共享(CORS)
此 HTTP 服务器默认支持 CORS 头。根据您想在 HTTP 响应中提供的头信息,有两种不同的 CORS 配置方法。
通过向 http-server
提供选项 --cors
,CORS 头将附加到每个 HTTP 响应,允许任何来源。
对于更复杂的配置,例如指定来源、一组允许的 HTTP 方法等,您应通过配置 TOML 文件指定配置。
以下示例显示了所有可用的选项。
[cors]
allow_credentials = false
allow_headers = ["content-type", "authorization", "content-length"]
allow_methods = ["GET", "PATCH", "POST", "PUT", "DELETE"]
allow_origin = "example.com"
expose_headers = ["*", "authorization"]
max_age = 600
request_headers = ["x-app-version"]
request_method = "GET"
基本认证
基本身份验证支持,在凭据无效时拒绝请求。您必须提供允许的 username
和 password
,可以通过使用 CLI 选项 --username
(与所需的用户名一起使用)和 --password
(与所需的密码一起使用),或者通过配置 TOML 文件指定这些值。
[basic_auth]
username = "John"
password = "Appleseed"
代理
HTTP 服务器能够代理请求到指定的 URL。
使用代理时,FileExplorer 不可用,因为代理是一个替代的 请求处理器。
配置 TOML 文件可以用来提供代理配置。
[proxy]
url = "https://example.com"
路线图
以下路线图列出了为版本 v1.0.0
提供的功能。
此路线图仍然开放供建议。如果您发现此列表中缺少了功能,您希望参与开发或期望在第一个稳定版本中看到的功能,请通过打开问题或讨论联系软件编辑。
如果您想贡献其中之一,请确保有一个跟踪该功能的 issue,并 ping 我。否则,打开一个 issue 以被分配,并在那里跟踪进度。
- 日志记录
- 请求/响应日志
- 服务配置登录
- 文件浏览器
- 修改日期
- 文件大小
- 面包屑导航
- 文件上传
- 过滤
- 排序
- 按文件名排序
- 按文件大小排序
- 按文件修改日期排序
- 目录优先
- 文件优先
- HTTPS/TLS 服务
- HTTPS/TLS 支持
- 压缩
-
gzip/deflate
压缩 -
brotli
压缩
-
- CORS
- 跨源资源共享
- 允许凭据
- 允许头信息
- 允许方法
- 允许来源
- 暴露头信息
- 最大年龄
- 请求头信息
- 请求方法
- 多个来源 (#8)
- 跨源资源共享
- 缓存控制
-
Last-Modified
和ETag
- 对
If-Modified-Since
返回 304 响应
-
- 部分请求
-
接受-范围
-
内容-范围
-
如果-范围
-
如果-匹配
-
范围
-
- 独立构建
- macOS
- Linux
- Windows
- 开发服务器
- 实时重新加载
- 代理
- URL 配置
- 基本认证
- 用户名
- 密码
- 优雅关闭
发布
为了创建一个发布版本,您必须按照以下方式推送 Git 标签
git tag -a <version> -m <message>
示例
git tag -a v0.1.0 -m "First release"
标签必须遵循 semver 规范。标签必须以下划线
v
字母开头。
然后按照以下方式推送标签
git push origin main --follow-tags
贡献
对这个项目的任何贡献都受到欢迎。请随意打开一个 pull request 或 issue。仅仅使用这个项目,您就在帮助它成长。谢谢!
许可证
根据MIT许可和Apache License(版本2.0)条款进行分发
依赖项
~19–31MB
~540K SLoC