2个版本
新版本 0.1.1 | 2024年8月20日 |
---|---|
0.1.0 | 2024年8月20日 |
#1408 in HTTP服务器
140KB
2.5K SLoC
此模块是从Pandora Web Server分叉而来的。
从原始模块中清理并删除了一些内容
Pandora Web Server的静态文件模块
静态文件模块允许从目录中提供静态文件。
支持的功能
GET
和HEAD
请求- 可配置目录索引文件
- 可以配置页面在
404 Not Found
错误上显示,而不是标准错误页面。 - 通过
If-Modified-Since
、If-Unmodified-Since
、If-Match
、If-None
匹配HTTP头部进行条件请求 - 通过
Range
和If-Range
HTTP头部进行字节范围请求 - 提供文件的前压缩版本(支持gzip、zlib deflate、compress、Brotli、Zstandard算法)
已知限制
- 不支持多个字节范围的请求,这将导致返回整个文件。实现此功能所需复杂性不值得这种罕见的用例。
- 目前无法在Pingora框架内支持零拷贝数据传输(即sendfile)。
压缩支持
您可以通过precompressed
配置设置激活对所选压缩算法的支持,例如使用此配置
root: /var/www/html
precompressed:
- gz
- br
使用此配置,对/file.txt
的请求可能会返回/file.txt.gz
或/file.txt.br
文件,如果目录中存在且客户端支持。如果存在多个支持的预压缩文件,则会根据客户端在Accept-Encoding
HTTP头部中传达的首选项选择一个。
如果禁用了预压缩文件或未找到支持的变体,响应可能仍然会进行动态压缩。可以使用压缩模块激活动态压缩。
配置设置
配置设置 | 命令行 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
根目录 |
--root |
目录路径 | 从该目录提供静态文件的目录 | |
canonicalize_uri |
--canonicalize-uri |
布尔值 | 真 |
如果设置为 true ,则对 /file%2etxt 的请求将被重定向到 /file.txt ,而对 /dir 的请求将被重定向到 /dir/ |
index_file |
--index-file |
字符串列表 | [] |
当请求目录时,在这些文件中查找目录,如果找到则显示第一个,而不是通常的 403 禁止 错误 |
page_404 |
--page-404 |
URI | 如果设置,则显示此页面而不是标准的 404 未找到 错误 |
|
precompressed |
--precompressed |
文件扩展名列表 | [] |
要查找的预压缩文件的文件扩展名。支持的扩展名有 gz (gzip),zz (zlib deflate),z (compress),br (Brotli),zst (Zstandard)。 |
declare_charset |
--declare-charset |
字符集 | "utf-8" |
为文本文件声明 字符集 |
declare_charset_types |
--declare_charset_types |
MIME 类型列表 | ["text/*", "*+xml", "*+json", "application/javascript", "application/json", "application/json5"] |
应应用 declare_charset 设置的 MIME 类型 |
指定 MIME 类型
declare_charset_types
设置是一个 MIME 类型的列表。每个条目应指定为以下格式之一
*
:适用于任何 MIME 类型。text/*
:类型匹配,适用于类型部分为text
的任何 MIME 类型。这比前缀匹配更有效。image/svg*
:前缀匹配,适用于以image/svg
开头的任何 MIME 类型。*+xml
:后缀匹配,适用于以+xml
结尾的任何 MIME 类型。application/javascript
:精确匹配,仅适用于application/javascript
MIME 类型。
依赖关系
~37–53MB
~1M SLoC