在Go中提供静态文件时是否需要http.StripPrefix?

时间:2017-06-03 06:50:41

标签: go

http.Handle("/static/", http.FileServer(http.Dir("")))有什么问题?

我能找到的最短的例子如下:

fs := http.FileServer(http.Dir("static"))
http.Handle("/static/", http.StripPrefix("/static/", fs))

http.StripPrefix是否必要?

1 个答案:

答案 0 :(得分:2)

不是不需要,但如果你不使用它,用于查找文件的路径将包含前缀。这个例子更清楚,所以想象你的文件夹结构是:

main.go
static/
  styles.css

你用以下文件提供文件:

http.Handle("/static/", http.FileServer(http.Dir("")))

然后,请求yoursite.com/static/styles.css文件的用户将获得static dir中的styles.css文件。但要实现这一目标,你的路径必须完美排列。

大多数人更喜欢这样做:

fs := http.FileServer(http.Dir("static"))
http.Handle("/static/", http.StripPrefix("/static/", fs))

因为他们可以将他们的URL路径更改为/assets/,而无需重命名静态目录(反之亦然 - 更改本地目录结构,不用更新URL路径)。

TL; DR - 路径前缀不是必需的,但对于完全匹配URL路径和本地目录结构的任何要求非常有用。