登录
首页 >  Golang >  Go问答

如何在Go中为Http.Handle或Http.FileServer添加自定义标头?

来源:stackoverflow

时间:2024-02-23 15:36:25 378浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《如何在Go中为Http.Handle或Http.FileServer添加自定义标头?》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

我在 go 中设置了一个非常基本的服务器

fs := http.fileserver(http.dir("./public"))
 http.handle("/",fs)

问题是:我希望人们使用 fetch() 访问我的 url。然而,由于设置了 cors,这是不可能的。

Access to fetch 'xxxxx' from origin 'null' has
been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested
resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch 
the resource with CORS disabled.

我需要找到一种方法来传入标头 access-control-allow-origin:*,但我不知道如何使用 http.handlehttp.fileserver,只有 http.handlefunc

我不能使用 http.handlefunc 因为据我所知它不允许我提供文件,而且我不想自己使用文件处理系统获取文件(我可能必须这样做除非有其他方法,否则是最后的手段)。另外,它的效率很低。为什么要重新发明轮子,尤其是当这个轮子比我能想到的要好得多时?

是否有任何方式无论如何使用 http.handle() 发送标头?

我对 go 还很陌生,我已经有一段时间没有做过静态类型语言了,也没有做过处理传入 url 的语言(我主要使用 php,所以......),所以我可能会也可能不会很好地掌握了这个概念。


解决方案


您可以将 http.fileserver 包装在 http.handlefunc 中:

func cors(fs http.handler) http.handlerfunc {
    return func(w http.responsewriter, r *http.request) {
        // do your cors stuff
        // return if you do not want the fileserver handle a specific request
        
        fs.servehttp(w, r)
    }
}

然后将其用于:

fs := http.FileServer(http.Dir("./public"))
http.Handle("/", cors(fs))

底层机制是http.handlerfunc实现了http.handler接口。

到这里,我们也就讲完了《如何在Go中为Http.Handle或Http.FileServer添加自定义标头?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>