fastcgi与lighttpd通信的特定环境变量
lighttpd和fastcgi之间通过特定的环境变量来传递客户端发送的http请求。
一、核心环境变量
| 变量名 | 说明 |
|---|---|
REQUEST_METHOD |
HTTP 请求方法(如 GET、POST、PUT)。 |
SCRIPT_NAME |
当前脚本的路径(如 /api)。 |
PATH_INFO |
URL 中脚本路径后的额外路径(如 /data,当 URL 为 /api/data 时)。 |
REQUEST_URI |
完整的请求路径(含查询参数,如 /api/data?key=value)。 |
QUERY_STRING |
URL 中的查询字符串(? 后的部分,如 key=value)。 |
CONTENT_TYPE |
请求体的媒体类型(如 application/json)。 |
CONTENT_LENGTH |
请求体的字节长度(如 1024)。 |
SERVER_SOFTWARE |
服务器名称及版本(如 lighttpd/1.4.73)。 |
SERVER_NAME |
服务器域名(如 example.com)。 |
SERVER_PORT |
服务器监听的端口(如 80)。 |
SERVER_PROTOCOL |
协议版本(如 HTTP/1.1)。 |
REMOTE_ADDR |
客户端的 IP 地址(如 192.168.1.100)。 |
REMOTE_PORT |
客户端的端口号。 |
HTTPS |
若为 HTTPS 请求,值为 on,否则为空。 |
二、HTTP 请求头
所有 HTTP 请求头会以 HTTP_ 前缀的环境变量形式传递(转换为大写,- 替换为 _):
| 请求头 | 对应环境变量 | 示例值 |
|---|---|---|
Host |
HTTP_HOST |
example.com |
User-Agent |
HTTP_USER_AGENT |
curl/7.68.0 |
Accept |
HTTP_ACCEPT |
*/* |
Cookie |
HTTP_COOKIE |
session=1234 |
Authorization |
HTTP_AUTHORIZATION |
Basic YWRtaW46cGFzc3dvcmQ= |
可以直接通过解析这些环境变量来获取客户端发送的url。下面写了个简单的例子获取环境变量的值:
#include <stdlib.h>
#include <stdio.h>
#include <fcgi_stdio.h>
int main()
{
while(FCGI_Accept() >= 0) {
printf("Content-type: text/html\r\n"
"\r\n"
"<title>FastCGI echo</title>"
"<h1>FastCGI echo</h1>\n"
"Request number %d, Process ID: %d<p>\n", 2, getpid());
char* host = getenv("HTTP_HOST");
printf("%s:<br>\n<pre>\n", "Request label");
printf("%s\n", host);
printf("</pre><p>\n");
}
return 0;
}
response如下:


浙公网安备 33010602011771号