fastcgi与lighttpd通信的特定环境变量

lighttpd和fastcgi之间通过特定的环境变量来传递客户端发送的http请求。

一、核心环境变量

变量名 说明
REQUEST_METHOD HTTP 请求方法(如 GETPOSTPUT)。
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如下:
image

posted @ 2025-04-01 10:31  cockpunctual  阅读(35)  评论(0)    收藏  举报