2012-02-07 54 views
4

對於這裏的大多數開明的人來說,這個問題可能看起來很愚蠢。但相信我,我問這是因爲我無法通過正常的谷歌搜索找到答案,因此在這裏度過。我知道CGI是語言不可知的。由於我不在web開發中,我只是想知道,如果我們有多個cgi腳本,其中一個可能是python腳本,而另一個可能是C等等,那麼Web服務器如何知道要尋找哪個編譯器?CGI如何識別編譯器?

+0

重要的是要注意,Web服務器通常不能直接執行C代碼;他們不編譯C自己。相反,在Web服務器可以將它用作CGI腳本之前,C必須由用戶編譯。 ([此例外](http://bellard.org/tcc/tcc-doc.html#SEC3),但通常情況下,C必須手動編譯。) – icktoofay 2012-02-07 04:06:17

回答

1

CGI裏沒有關於這個的東西。每個Web服務器都有不同的表現。例如,Apache有整個configuration language用於指定請求如何處理,過濾和路由到處理程序。相比之下,python simple HTTP server沒有CGI腳本的概念,只是調用python對象上的方法來爲請求提供服務。

編輯:

CGI通常意味着RFC 3875。該文檔從不要求Web服務器將本地文件系統上的文件與URL相關聯。

被最接近談論腳本位是

3.4。執行

該腳本是在一個系統定義的方式調用。

它基本上允許服務器委託腳本,如果他們喜歡或做任何他們喜歡的任何事情來處理請求。

+0

這是否意味着CGI腳本只是純文本文件和識別合適編譯器的責任僅在於Web服務器?我甚至想,如果python中的shebang行可能與此有關:D – 2012-02-07 03:53:30

+0

@Jack_of_All_Trades,我編輯了關於RFC 3875的編輯以及它給服務器提供了多少寬度。 – 2012-02-07 04:44:58

2

CGI腳本由操作系統運行。

Web服務器通常假設一個文件是一個CGI腳本,如果它在某個目錄(通常命名爲cgi-bin),並具有可執行位集。

如果Web服務器認爲該文件是CGI腳本,它會設置一些環境變量和其他小東西,然後要求操作系統執行它。

操作系統查看其是否可以直接執行它,如果可以,那麼它的作用。否則,它會查找hashbang並使用它來執行該腳本。