为了账号安全,请及时绑定邮箱和手机立即绑定

Go http:服务 /static 和 /static/ 之间的区别

Go http:服务 /static 和 /static/ 之间的区别

Go
牛魔王的故事 2021-12-20 14:36:52
我有一个可怕的困惑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/pagestatic/myscript.js=example.com/some/page/static/myscript.js


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 305 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号