我正在使用这个脚本.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
telnet localhost 9000
Connected to localhost.
GET / HTTP/1.1
Connection closed by foreign host.
为什么我仅使用 cgi-fcgi 即可获得成功结果?如何使用 curl 和 telnet 从脚本获取相同的数据?
答案1
FastCGI 不是 HTTP,这就是 curl 无法工作的原因(至少对于 http(默认)URL 来说无法工作)。
这也是为什么您的 telnet 示例不起作用的原因(因为您正在通过 HTTP 与它通信)。
虽然 curl 确实支持多种协议,但 FastCGI 并不是其中之一。
FastCGI 协议并不是特别简单;它首先是一个二进制协议,旨在连接到 Web 服务器,而不是常规的 HTTP 客户端。
如果您想要一些可以在没有启动和运行 Web 服务器的情况下通过浏览器指向的东西,那么您将需要某种桥接器(这正是 Web 服务器所做的)。保留 cgi-fcgid 以帮助您解决任何 Web 服务器配置问题。