【问题标题】:Go http: difference between serving /static and /static/转到 http:服务 /static 和 /static/ 之间的区别
【发布时间】:2016-06-17 08:00:20
【问题描述】:

我对@9​​87654323@ 和斜线感到非常困惑。

我需要为 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 go handler


【解决方案1】:

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>

以斜线 / 开头的网址是绝对的。这意味着您在哪个页面上并不重要,它始终会附加到域名后,例如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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-02
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多