Я использую этот сценарий.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 для получения тех же данных из сценария?
FastCGI - это не HTTP, поэтому curl не работает (по крайней мере, не с URL-адресами http (по умолчанию)).
Вот почему ваш пример telnet не работает (потому что вы говорите с ним по протоколу HTTP).
Хотя curl поддерживает (очень!) Широкий спектр протоколов, FastCGI к ним не относится.
Протокол FastCGI не особо тривиален; Для начала это бинарный протокол, предназначенный для подключения к веб-серверу, а не к обычному HTTP-клиенту.
Если вам нужно что-то, на что вы можете указать в браузере, не имея запущенного и работающего веб-сервера, вам понадобится какой-то мост (что и будет делать веб-сервер). Сохраните cgi-fcgid, чтобы помочь вам устранить любые проблемы с конфигурацией веб-сервера.