對於這裏的大多數開明的人來說,這個問題可能看起來很愚蠢。但相信我,我問這是因爲我無法通過正常的谷歌搜索找到答案,因此在這裏度過。我知道CGI是語言不可知的。由於我不在web開發中,我只是想知道,如果我們有多個cgi腳本,其中一個可能是python腳本,而另一個可能是C等等,那麼Web服務器如何知道要尋找哪個編譯器?CGI如何識別編譯器?
回答
CGI裏沒有關於這個的東西。每個Web服務器都有不同的表現。例如,Apache有整個configuration language用於指定請求如何處理,過濾和路由到處理程序。相比之下,python simple HTTP server沒有CGI腳本的概念,只是調用python對象上的方法來爲請求提供服務。
編輯:
CGI通常意味着RFC 3875。該文檔從不要求Web服務器將本地文件系統上的文件與URL相關聯。
被最接近談論腳本位是
3.4。執行
該腳本是在一個系統定義的方式調用。
它基本上允許服務器委託腳本,如果他們喜歡或做任何他們喜歡的任何事情來處理請求。
這是否意味着CGI腳本只是純文本文件和識別合適編譯器的責任僅在於Web服務器?我甚至想,如果python中的shebang行可能與此有關:D – 2012-02-07 03:53:30
@Jack_of_All_Trades,我編輯了關於RFC 3875的編輯以及它給服務器提供了多少寬度。 – 2012-02-07 04:44:58
CGI腳本由操作系統運行。
Web服務器通常假設一個文件是一個CGI腳本,如果它在某個目錄(通常命名爲cgi-bin
),並具有可執行位集。
如果Web服務器認爲該文件是CGI腳本,它會設置一些環境變量和其他小東西,然後要求操作系統執行它。
操作系統查看其是否可以直接執行它,如果可以,那麼它的作用。否則,它會查找hashbang並使用它來執行該腳本。
- 1. 如何實現識別迭代器的編譯器?
- 2. Qt - 編譯器無法識別「連接」
- 3. 編譯器無法識別標誌
- 4. Android項目停止識別編譯器
- 5. 編譯器無法識別WebFrame方法
- 6. -fopenmp不被GCC編譯器識別?
- 7. Scala編譯器不能識別綁定
- 8. 如何識別編譯器變量值不是默認值?
- 9. 我將如何讓編譯器能夠識別這些字符
- 10. 編譯的Python CGI
- 11. @SuppressWarnings註釋未被編譯器/文本編輯器識別
- 12. 編譯器如何編譯編譯器?
- 13. 如何用ML編譯器編譯類別代碼?
- 14. 如何識別編碼
- 15. 無法識別的配置節編譯
- 16. Ant編譯無法識別plugin.jar庫
- 17. 強制FreeType的識別交叉編譯
- 18. Android編譯「識別」相同的PNG
- 19. Java的編譯時錯誤:編譯器不能識別方法重寫
- 20. Crontab不識別編輯器
- 21. 如何在編譯時識別所有libc調用?
- 22. 如何讓python識別讀取預編譯的共享文件?
- 23. 如何讓Emacs識別用於編譯的bash環境變量?
- 24. 在編譯時如何識別對象類型?
- 25. 爲Win32編寫編譯器的知識
- 26. Java反編譯器如何從while循環中識別for循環?
- 27. 如何讓MS C++編譯器識別未在#include中定義的類型?
- 28. 編譯器將如何識別要讀取或更新哪個靜態變量?
- 29. 如何讓TeamCity識別msbuild編譯錯誤,使用Rake運行器
- 30. 在C++中解釋編譯器如何識別類是否抽象?
重要的是要注意,Web服務器通常不能直接執行C代碼;他們不編譯C自己。相反,在Web服務器可以將它用作CGI腳本之前,C必須由用戶編譯。 ([此例外](http://bellard.org/tcc/tcc-doc.html#SEC3),但通常情況下,C必須手動編譯。) – icktoofay 2012-02-07 04:06:17