揭開Go 的Web 伺服器中的「根」目錄
在Go 的net/http Web 伺服器中,固定「根」的概念不存在用於提供文件的目錄。相反,處理程序用於回應 URL 請求,從而提供更大的靈活性和對內容交付的控制。
處理程序映射
處理程序是處理 HTTP 請求的函數並產生相應的回應。 URL 使用 Handle() 或 HandleFunc() 函數與處理程序關聯。當收到 HTTP 請求時,伺服器會將請求的 URL 與註冊的處理程序進行匹配,以確定哪個處理程序應處理該請求。
靜態文件
用於提供靜態文件,Go提供了FileServer()函數。它會傳回一個處理程序,為指定「根」目錄中的檔案提供服務。該目錄可以指定為絕對路徑或相對路徑。
絕對路徑
如果絕對路徑與FileServer() 一起使用,則「根」目錄是明確的.
相對路徑
但是,相對路徑取決於目前工作目錄,通常是啟動應用程式的目錄。例如:
http.Handle("/", http.FileServer(http.Dir("/tmp")))
這會分配一個處理程序來提供“/tmp”目錄中的文件,映射到根 URL“/”。因此,對「/mydoc.txt」的回應將是檔案「/tmp/mydoc.txt」。
複雜映射
更複雜的映射場景可以是使用StripPrefix() 函數實現,該函數在將請求URL 路徑傳遞到FileServer() 之前修改請求URL路徑。這樣可以從與根 URL 不同的目錄或路徑提供檔案。
範例:
http.Handle("/tmpfiles/", http.StripPrefix("/tmpfiles/", http.FileServer(http.Dir("/tmp"))))
此設定從URL 路徑「/tmpfiles/」下的「/tmp」提供檔案;對「/tmpfiles/mydoc.txt」的請求將使用檔案“/tmp/mydoc.txt”回應。
以上是Go 的 net/http 伺服器如何在沒有固定根目錄的情況下處理靜態檔案服務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!