gpt4 book ai didi

http - 转到 http : difference between serving/static and/static/

转载 作者:数据小太阳 更新时间:2023-10-29 03:27:39 24 4
gpt4 key购买 nike

我对 http.FileServer 和斜杠感到非常困惑。

我需要为 html 页面提供脚本。在我工作的目录中,我有页面 index.html 并且我有一个 static 目录,里面有 myscript.js

第一个问题:这样写对不对

<script src="/static/myscript.js"></script>

?我也看到了 src="static/myscript.js" 我不知道是否有理由使用其中一个(但我猜它会影响我们必须编写的处理程序服务器)。

假设我们满足于第一个版本。第二个问题:在服务器端,我想为目录 static 注册处理程序。灵感来自 this example ,我这样做:

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 但我没有实际的方法来证明它。

最佳答案

http.Handle("/static", http.StripPrefix("/static", fs))注册一个固定名称模式。

http.Handle("/static/", http.StripPrefix("/static/", fs))注册一个根子树模式。

前者只匹配 URL.path = "/static" 的请求.后者匹配所有以 "/static/" 开头的路径. 404表示它无法匹配给定请求的任何模式,而不是找不到请求的文件。 (它甚至没有执行 FileServer 的处理程序!)


然后回答你的第一个问题:

<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

关于http - 转到 http : difference between serving/static and/static/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35781571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com