3 回答
TA贡献1852条经验 获得超7个赞
http.StripPrefix() 将请求的处理转发给您指定为参数的请求,但在此之前它会通过去除指定的前缀来修改请求 URL。
因此,例如在您的情况下,如果浏览器(或 HTTP 客户端)请求资源:
/static/example.txt
StripPrefix将剪切/static/并将修改后的请求转发给返回的处理程序,http.FileServer()因此它会看到请求的资源是
/example.txt
在Handler通过返回http.FileServer()将寻找并送达文件的内容相对文件夹(或者更确切地说,FileSystem指定作为其参数)(指定"static"为静态文件的根目录)。
现在因为"example.txt"在static文件夹中,您必须指定一个相对路径才能获得正确的文件路径。
另一个例子
这个例子可以在 http 包文档页面(这里)上找到:
// To serve a directory on disk (/tmp) under an alternate URL
// path (/tmpfiles/), use StripPrefix to modify the request
// URL's path before the FileServer sees it:
http.Handle("/tmpfiles/",
http.StripPrefix("/tmpfiles/", http.FileServer(http.Dir("/tmp"))))
解释:
FileServer()被告知静态文件的根是"/tmp". 我们希望 URL 以"/tmpfiles/". 因此,如果有人请求"/tempfiles/example.txt",我们希望服务器发送文件"/tmp/example.txt"。
为了实现这一点,我们必须"/tmpfiles"从 URL 中剥离,剩下的将是与根文件夹相比的相对路径"/tmp",如果我们加入,则给出:
/tmp/example.txt
TA贡献1848条经验 获得超2个赞
假使,假设
我有一个文件
/home/go/src/js/kor.js
然后,告诉 fileserve 服务本地目录
fs := http.FileServer(http.Dir("/home/go/src/js"))
示例 1 - 到 Filerserver 根的根 url
现在文件服务器将"/"
请求作为"/home/go/src/js"+"/"
http.Handle("/", fs)
是的,http://localhost/kor.js
请求告诉文件服务器,kor.js
在
"/home/go/src/js" + "/" + "kor.js".
我们得到了kor.js
文件。
示例 2 - 文件服务器根目录的自定义 url
但是,如果我们添加额外的请求名称。
http.Handle("/static/", fs)
现在文件服务器将"/static/"
请求作为"/home/go/src/js"+"/static/"
是的,http://localhost/static/kor.js
请求告诉文件服务器,kor.js
在
"/home/go/src/js" + "/static/" + "kor.js".
我们收到了 404 错误。
示例 3 - 自定义 url 到文件服务器根目录
所以,我们在 Fileserver 获取它之前修改请求 url http.StripPrefix("/tmpfiles/", ...
之后stripPrefix
文件服务器承担/
,而不是/static/
"/home/go/src/js" + "/" + "kor.js".
得到了 kor.js
TA贡献1773条经验 获得超3个赞
我将一一回答这两个问题。
问题 1 的答案 1: 如果您的代码如下所示:
http.Handle("/static/", http.FileServer(http.Dir("static"))
你的根文件夹是%GOPATH%/src/project_name/static/
. 当您访问 时localhost:8080/static
,URL/static
将被转发到由http.FileServer()返回的处理程序。但是,static
根文件夹中没有命名的目录或文件。
问题 2 的答案 2:通常,/static
如果删除http.StripPrefix(),则无法访问文件夹。但是,如果您有一个名为 的目录或文件static
,则可以使用URL访问它(完全不是您想要的根目录)localhost:8080:/static
。
顺便说一句,如果您的 URL 不以 开头,您将无法访问任何内容/static
,因为http.ServeMux
不会重定向您的请求。
- 3 回答
- 0 关注
- 170 浏览
添加回答
举报