我正在使用这个 script.c:
#include <fcgi_stdio.h>
#include <stdlib.h>
int main (void) {
while (FCGI_Accept() >= 0) {
printf("Status: 200 OK\r\n");
printf("Content-type: text/html\r\n\r\n");
printf("<!doctype><html><body>Welcome!</body></html>\n");
}
return EXIT_SUCCESS;
}
我编译它使用
gcc script.c -o script.fcgi -lfcgi -O3 -Wall -Wextra -pedantic -std=c11
然后,我输入终端:
cgi-fcgi -start -connect localhost:9000 script.fcgi
cgi-fcgi -connect localhost:9000 script.fcgi
并获得输出
Status: 200 OK
Content-type: text/html
<!doctype><html><body>Welcome!</body></html>
之后,我使用了 curl
curl localhost:9000
curl: (52) Empty reply from server
和远程登录
telnet localhost 9000
Connected to localhost.
GET / HTTP/1.1
Connection closed by foreign host.
为什么我只使用 cgi-fcgi 获得成功结果?如何使用 curl 和 telnet 从脚本中获取相同的数据?
FastCGI 不是 HTTP,这就是 curl 不起作用的原因(至少不适用于 http(默认)URL)。
这也是您的 telnet 示例不起作用的原因(因为您正在与它交谈 HTTP)。
虽然 curl 确实支持(非常!)种类繁多的协议,但 FastCGI 不是其中之一。
FastCGI 协议并不是特别简单。它最初是一个二进制协议,旨在连接到 Web 服务器,而不是常规的 HTTP 客户端。
如果您想要一些可以在没有启动和运行网络服务器的情况下指向浏览器的东西,那么您将需要某种桥接器(这就是网络服务器所做的)。保留 cgi-fcgid 以帮助您解决任何网络服务器配置问题。