Go http:服务 /static 和 /static/ 之间的区别
Go http: difference between serving /static and /static/
我对 http.FileServer
和斜杠感到非常困惑。
我需要为 html 页面提供脚本。在我工作的目录中,我有页面 index.html
并且我有一个 static
目录,里面有 myscript.js
。
第一个问题:这样写对吗
<script src="/static/myscript.js"></script>
?我也看到了 src="static/myscript.js"
,我不知道是否有理由使用其中之一(但我猜它会影响我们必须在服务器上编写的处理程序)。
假设我们满足于第一个版本。第二个问题:在服务器端,我想注册目录 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
但我没有实际的方法来证明它。
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.FileServer
和斜杠感到非常困惑。
我需要为 html 页面提供脚本。在我工作的目录中,我有页面 index.html
并且我有一个 static
目录,里面有 myscript.js
。
第一个问题:这样写对吗
<script src="/static/myscript.js"></script>
?我也看到了 src="static/myscript.js"
,我不知道是否有理由使用其中之一(但我猜它会影响我们必须在服务器上编写的处理程序)。
假设我们满足于第一个版本。第二个问题:在服务器端,我想注册目录 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
但我没有实际的方法来证明它。
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