我有一个可怕的困惑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 处理程序!)
并回答你的第一个问题:
<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 关注
- 307 浏览
添加回答
举报
0/150
提交
取消
