我有一個可怕的困惑http.FileServer和斜線。我需要為 html 頁面提供腳本。在我正在工作的目錄中index.html,我有一個頁面,我在里面有一個static目錄myscript.js。第一個問題:寫的對不對<script src="/static/myscript.js"></script>? 我也看到了src="static/myscript.js",我不知道是否有理由使用一個或另一個(但我想它會影響我們必須在服務器上編寫的處理程序)。假設我們滿足于第一個版本。第二個問題:在服務器端,我想為 directory 注冊處理程序static。受這個例子的啟發,我這樣做:fs := http.FileServer(http.Dir("./static"))http.Handle("/static", http.StripPrefix("/static", fs))但我得到了一個404. 但是,如果我使用:fs := http.FileServer(http.Dir("./static"))http.Handle("/static/", http.StripPrefix("/static/", fs))用結尾斜線,它工作正常!我對網絡服務器真的很陌生,所以我很感激任何解釋,包括函數傳遞的實際地址是什么。例如,我不知道(并且我無法從net/http文檔中弄清楚)在處理/static請求時傳遞給處理程序的地址是什么。我想是/static/myscript.js因為我們正在使用,http.StripPrefix但我沒有實際的方法來證明它。
1 回答

蕪湖不蕪
TA貢獻1796條經驗 獲得超7個贊
http.Handle("/static", http.StripPrefix("/static", fs))
注冊一個固定的名稱模式。
http.Handle("/static/", http.StripPrefix("/static/", fs))
注冊一個有根的子樹模式。
前者只匹配請求 where URL.path = "/static"
。后者匹配所有以"/static/"
.開頭的路徑。在404
表明它不能匹配給定請求的任何模式,而不是所請求的文件沒有被發現。(它甚至無法執行FileServer
's 處理程序?。?/p>
并回答你的第一個問題:
<script src="/static/myscript.js"></script>
以斜杠開頭的 URL/
是絕對的。這意味著您在哪個頁面上并不重要,它將始終附加到域名,例如example.com/some/page
+ /static/myscript.js
=example.com/static/myscript.js
<script src="static/myscript.js"></script>
是相對路徑。這意味著它將被附加到當前訪問頁面的 URL 例如example.com/some/page
+ static/myscript.js
=example.com/some/page/static/myscript.js
- 1 回答
- 0 關注
- 266 瀏覽
添加回答
舉報
0/150
提交
取消