8个版本
0.3.1 | 2023年10月20日 |
---|---|
0.3.0 | 2023年7月19日 |
0.2.5 | 2023年7月12日 |
0.2.3 | 2021年3月30日 |
0.2.0 | 2019年6月3日 |
#278 in HTTP服务器
66KB
1.5K SLoC
此crate是一个Rust程序的薄CGI/FCGI包装器。它不是一个完整的Web框架。您编写Rust程序就像它是CGI一样,使用提供的 stdin
、stdout
和 env
替换。此crate执行使它既作为CGI也作为FCGI运行的工作,并行性多少由需求而定。
有关更多信息,请参阅 crate文档。
明确支持Unix系统,但我在Linux上进行了测试。Windows支持存在,但完全未测试。
许可证
outer_cgi在zlib许可证下分发。许可证的(非常简短)文本可以在 LICENSE.md
中找到。
lib.rs
:
此crate是一个薄CGI/FCGI包装器。它将您的程序转换为自适应CGI脚本;能够在各种配置中作为CGI或FCGI调用。
这不是一个完整的Web框架。它执行最小验证,并且不解析超出将一个或多个CGI风格请求传递给您的处理器的最低限度的必需内容。以下是一些 outer_cgi 不执行 的示例
- 验证环境变量,除检查在作为CGI调用时
GATEWAY_INTERFACE
以"CGI/"
开头外。 - 解析查询字符串或cookie。
- 提供模板引擎。
- 提供任何数据库接口。
以下是它 执行 的内容
- 无缝支持作为CGI或FCGI的操作。
- FCGI可以通过“标准”方式启动(其中stdin是监听套接字)或通过显式绑定到TCP端口或UNIX套接字。
- UNIX版本支持以下附加功能
setuid
、setgid
和chroot 以降低权限。
- 记录到
syslog
,无论是由于必要性(由其他进程作为FCGI启动)还是用户请求。 - 进程化。
您将代码编写为简单的CGI脚本,使用outer_cgi
替换stdin
、stdout
和env
。然后outer_cgi
允许网站管理员以最适合的配置部署您的脚本。
extern crate outer_cgi;
use std::collections::HashMap;
use outer_cgi::IO;
fn handler(io: &mut IO, env: HashMap<String, String>) -> anyhow::Result<i32> {
io.write_all(format!(r#"Content-type: text/plain; charset=utf-8
Hello World! Your request method was "{}"!
"#, env.get("REQUEST_METHOD").unwrap()).as_bytes())?;
Ok(0)
}
pub fn main() {
outer_cgi::main(|_|{}, handler)
}
有关更多信息,请参阅通用网关接口规范。
根据RFC,当前工作目录应当是包含脚本的目录。当以FCGI方式运行时,确保这一点由网站管理员负责。
依赖项
~2–10MB
~83K SLoC