Linux-Networking

如何使用 curl 和 telnet 而不是 cgi-fcgi?

  • April 7, 2021

我正在使用這個 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 以幫助您解決任何網路伺服器配置問題。

引用自:https://serverfault.com/questions/1059428