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服务器

Download history 5/week @ 2024-04-29 113/week @ 2024-05-06 14/week @ 2024-05-20 7/week @ 2024-05-27 17/week @ 2024-06-03 7/week @ 2024-06-10 202/week @ 2024-06-17 45/week @ 2024-06-24 73/week @ 2024-07-01 67/week @ 2024-07-08 9/week @ 2024-07-15 13/week @ 2024-07-22 149/week @ 2024-07-29 18/week @ 2024-08-05 7/week @ 2024-08-12

每月187次下载

MIT/Apache

1.5MB
3.5K SLoC

http-server

简单且可配置的命令行HTTP服务器

Crates.io Documentation Build Clippy Formatter Tests Benches

安装

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"

基本认证

基本身份验证支持,在凭据无效时拒绝请求。您必须提供允许的 usernamepassword,可以通过使用 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-ModifiedETag
    • 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