lighthttpd 搭建的http服务器, cgi调用 getenv("HTTP_AUTHORIZATION") 返回空
时间: 2023-06-17 09:07:31 浏览: 283
如果在使用 Lighttpd 搭建的 HTTP 服务器中,调用 `getenv("HTTP_AUTHORIZATION")` 函数返回空,则可能是因为 Lighttpd 的默认配置中没有启用 HTTP 基本身份验证(HTTP Basic Authentication)。
要启用 HTTP 基本身份验证,需要进行以下配置:
1. 在 Lighttpd 的配置文件中添加以下内容:
```
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/path/to/.htpasswd"
auth.require = ( "/" =>
(
"method" => "basic",
"realm" => "Password protected area",
"require" => "valid-user"
)
)
```
其中,`/path/to/.htpasswd` 是存储用户凭据的文件路径。
2. 生成 `.htpasswd` 文件,其中包含用户名和加密后的密码。可以使用 `htpasswd` 工具来生成该文件,例如:
```
htpasswd -c /path/to/.htpasswd username
```
其中,`username` 是要添加的用户名。
3. 重新启动 Lighttpd 服务器,使配置生效。
在启用 HTTP 基本身份验证后,`getenv("HTTP_AUTHORIZATION")` 函数应该能够返回正确的值了。
相关问题
lighthttpd 服务器下的cgi 获取 getenv("HTTP_AUTHORIZATION") 返回空
在lighttpd服务器下,获取HTTP认证头信息的方式稍有不同,需要使用`lighttpd.h`头文件中的`http_cgienv_get`函数获取HTTP认证头信息。示例代码如下:
```c
#include <lighttpd.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
const char *auth_header = http_cgienv_get("HTTP_AUTHORIZATION");
if (auth_header) {
printf("Authorization header: %s\n", auth_header);
} else {
printf("Authorization header not found.\n");
}
return 0;
}
```
需要注意,`http_cgienv_get`函数返回的是HTTP头的值,而不是整个HTTP头。如果需要获取完整的HTTP头,可以使用`http_cgienv_headers`函数。
lighthttpd 下的cgi getenv("HTTP_AUTHORIZATION") 返回空
在使用 Lighttpd 时,如果您希望从 CGI 脚本中访问 HTTP 验证信息,需要对 Lighttpd 进行一些配置。默认情况下,Lighttpd 不会将 HTTP 验证信息传递给 CGI 脚本,因为这可能会存在安全风险。为了允许 CGI 脚本访问 HTTP 验证信息,请按照以下步骤进行操作:
1. 在 Lighttpd 的配置文件中添加以下行:
```
setenv.add-environment = (
"HTTP_AUTHORIZATION" => ""
)
```
这将启用 Lighttpd 将 HTTP 验证信息传递给 CGI 脚本。
2. 重新启动 Lighttpd 以使更改生效。
3. 在 CGI 脚本中,您应该能够使用 `getenv("HTTP_AUTHORIZATION")` 访问 HTTP 验证信息。
请注意,这可能会引入安全风险,因此请确保您的 CGI 脚本能够安全地处理 HTTP 验证信息。
阅读全文