FastCGI 和查询字符串(在 C 中工作)

FastCGI and Query Strings (working in C)

只是一个关于使用 FastCGI 的快速问题。到目前为止,我已经编程了大约一个月,我发现很难全神贯注于 FastCGI。

基本上这是我的问题。

  1. 我该如何设置我的查询字符串?

  2. 从编程的角度来看,我什至可以 "set" 吗?

  3. 如果是我必须设置的东西,我应该在哪里设置?

代码:

 while(FCGI_Accept() >= 0) {

    if (getenv("QUERY_STRING") != NULL)
    {
        strcpy(query_string, getenv("QUERY_STRING"));

        if (query_count == 0)
        {
            printf("Content-type: text/html\r\n\r\n");
            printf("Query string has no data pairs!\n");
            continue;
        }
    }
    else
    {
        printf("Content-type: text/html\r\n\r\n");
        printf("Query string does not exist!\n");
        continue;
    }
}

下面的代码总是returns NULL for getenv(QUERY_STRING).

所有表单变量都在查询字符串中从浏览器传递到 http 服务器(对于 GET http 请求不是 POST) html 页面通常会有 html 表单和各种表单变量 例如

<HTML>

 <BODY>
  <FORM METHOD=GET ACTION="http://localhost:8888/login.cgi">
  <input name="ID" type="text">
    <input name=submit type="submit" value="Submit">

  </FORM>
 </BODY>
</HTML>

用户通常会通过单击提交按钮(这只是另一个表单变量)来填写表单并提交,浏览器将 GET 请求发送到由 URL 标识为 http://localhost:8888/login.cgi?ID=aa&submit=Submit 的网络服务器,其中 localhost:8888 标识 web 服务器所在的 ip 和端口 运行,/login.cgi 告诉 web 服务器哪个 cgi 将服务于给定的 http 请求,查询字符串是后面的文本?即ID=aa&submit=提交.

网络服务器或(网络服务器提供的库绑定到CGI)解析http请求数据,包括查询字符串,http请求头,并将它们作为环境变量传递给cgi程序。查询字符串在环境变量 QUERY_STRING 中传递。 CGI 程序应该在其应用程序逻辑中使用这些值

FastCGI 不基于环境变量工作,这就是为什么您无法使用 getenv 从网络服务器获取任何信息。

相反,FastCGI 在网络服务器和 FastCGI 进程之间使用套接字接口(即 运行 永久采用守护程序样式),即您的 FastCGI 守护程序在 TCP 套接字或 Unix 套接字上侦听传入请求。

我建议查看此网页,其中包含 FastCGI 守护程序的解释以及各种编程语言(包括 C)的示例代码: https://www.hiawatha-webserver.org/howto/cgi_and_fastcgi