fcgi_stdio和 fcgiapp 有什么区别

What is the difference between fcgi_stdio and fcgiapp?

本文关键字:什么 区别 fcgiapp stdio fcgi      更新时间:2023-10-16

我正在尝试开始快速cgi开发,因此我下载了libfcgi的参考实现,并尝试让测试程序与lighttpd一起运行。由于fcgi_stdio允许cgi向后兼容性,因此我决定从此开始。但是我无法让examples/tiny-fcgi.clighttpd一起工作,它产生了一个internal server errror 500,相同的配置允许完美运行lighttpd示例程序(http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModFastCGI,低于C/C++ FastCGI on lightty named socket)。但是,我完全不清楚为什么默认提供的示例不起作用。

问题:

  1. 参考实现中的 examples/tiny-fcgi.c 示例导致 lighttpd 返回错误 500 有什么问题?
  2. 哪种 fastcgi 实现更适合 c++ 开发(fcgi_stdio、fcgiapp、其他)?(fcgi 包中有一些流,但我找不到好的/任何文档)

我已经测试了未修改的示例(Ubuntu/13.10/amd-64、Apache/2.4.6、libapache2-mod-fastcgi/2.4.7~0910052141-1.1、libfcgi-dev/2.4.0-8.1ubuntu4),它运行正常:

manuelz@garibaldi:~$ curl habrich/tiny-fcgi
<title>FastCGI Hello! (C, fcgi_stdio library)</title>
<h1>FastCGI Hello! (C, fcgi_stdio library)</h1>
Request number 2 running on host <i>habrich</i>

答案:

  1. 不知道您的配置很难分辨,但这里有一个黑暗中的镜头:如果未定义SERVER_NAMEgetenv将返回NULL
  2. fcgiapp是基本实现:我会将其用于新开发。 fcgi_stdio是与CGI兼容的包装器:使用它来迁移遗留的CGI项目。报价:

    fcgi_stdio 作为 FCGIAPP 顶部的薄层实现

您可以在 fcgiapp.h 标头中找到有关fcgiapp的体面文档。
我不知道

你的问题是否与我的问题有相同的起源,但至少它有相同的症状。

tiny-fcgi 示例有不同的版本。 我首先尝试了这里给出的那个(示例 1)。 此操作失败,出现内部服务器错误。 但是,这里给出的示例(基本相同)有效。 微小但关键的区别是工作代码使用

getenv("SERVER_NAME")

而不是

getenv("SERVER_HOSTNAME")

对我来说并不完全相同,但是如果我避免使用getenv示例运行而没有错误,则必须发现为什么getenv会导致错误