前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
前言
整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。
開源項目
從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。
系列文章
web server apache tomcat11-01-官方文檔入門介紹
web server apache tomcat11-02-setup 啟動
web server apache tomcat11-03-deploy 如何部署
web server apache tomcat11-04-manager 如何管理?
web server apache tomcat11-06-Host Manager App -- Text Interface
web server apache tomcat11-07-Realm Configuration
web server apache tomcat11-08-JNDI Resources
web server apache tomcat11-09-JNDI Datasource
web server apache tomcat11-10-Class Loader
...
Introduction
CGI (Common Gateway Interface) 定義了 Web 伺服器與外部內容生成程式(通常稱為 CGI 程式或 CGI 腳本)交互的方式。
在 Tomcat 中,當您將 Tomcat 用作 HTTP 伺服器並且需要 CGI 支持時,可以添加 CGI 支持。通常在開發期間進行這樣的操作,當您不想運行諸如 Apache httpd 等網路伺服器時。Tomcat 的 CGI 支持與 Apache httpd 的相容性很高,但有一些限制(例如,只有一個 cgi-bin 目錄)。
CGI 支持是使用 servlet 類 org.apache.catalina.servlets.CGIServlet 實現的。傳統上,將此 servlet 映射到 URL 模式 "/cgi-bin/*"。
預設情況下,Tomcat 中禁用了 CGI 支持。
安裝
註意 - CGI 腳本用於執行 Tomcat JVM 外部的程式。
要啟用 CGI 支持:
在預設的 $CATALINA_BASE/conf/web.xml 文件中有註釋的示例 servlet 和 servlet-mapping 元素,用於 CGI servlet。要在 Web 應用程式中啟用 CGI 支持,請將該 servlet 和 servlet-mapping 聲明複製到 Web 應用程式的 WEB-INF/web.xml 文件中。
取消註釋 $CATALINA_BASE/conf/web.xml 文件中的 servlet 和 servlet-mapping 可以一次為所有已安裝的 Web 應用程式啟用 CGI。
在您的 Web 應用程式的 Context 元素上設置 privileged="true"。
只有標記為特權的 Context 才允許使用 CGI servlet。請註意,修改全局的 $CATALINA_BASE/conf/context.xml 文件會影響所有 Web 應用程式。有關詳細信息,請參閱 Context 文檔。
配置
有幾個 servlet init 參數可用於配置 CGI servlet 的行為。
- cgiMethods - 逗號分隔的 HTTP 方法列表。使用這些方法之一的請求將被傳遞給 CGI 腳本以生成響應。預設值為 GET,POST。使用 * 可以使腳本處理所有請求,而不管方法如何。除非被該參數的配置覆蓋,否則使用 HEAD、OPTIONS 或 TRACE 的請求將由超類處理。
- cgiPathPrefix - CGI 搜索路徑將從 web 應用程式根目錄 + File.separator + 此首碼開始。預設情況下沒有值,這將導致將 web 應用程式根目錄用作搜索路徑。建議的值是 WEB-INF/cgi。
- cmdLineArgumentsDecoded - 如果啟用了命令行參數(通過 enableCmdLineArguments)並且 Tomcat 在 Windows 上運行,則每個解碼的命令行參數必須匹配此模式,否則請求將被拒絕。這是為了防止已知問題從 Java 傳遞命令行參數到 Windows。這些問題可能導致遠程代碼執行。有關這些問題的更多信息,請參閱 Markus Wulftange 的博客和 Daniel Colascione 的存檔博客。
- cmdLineArgumentsEncoded - 如果啟用了命令行參數(通過 enableCmdLineArguments),則每個已編碼的命令行參數必須匹配此模式,否則請求將被拒絕。預設匹配 RFC3875 定義的允許值,格式為 [\w\Q%;/?