我有一个正在编写的 golang api。我对 cors 使用以下函数
func ResponseWithJSON(w http.ResponseWriter, json []byte, code int) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Header().Set("Access-Control-Allow-Origin", "*")
w.WriteHeader(code)
w.Write(json)
}
这允许任何人访问我的 api。我想将其限制为我的域名。因为这听起来更安全。让我们称之为 www.example.com
我可以把它改成
w.Header().Set("Access-Control-Allow-Origin", "http://www.example.com")
这将允许我在 url 为 www.example.com 而不是 example.com 时调用电话
然后我可以把它改成
w.Header().Set("Access-Control-Allow-Origin", "http://example.com")
现在我可以从 example.com 访问我的 api 而不是 www.example.com
添加两者都不起作用 这两种方式都不行
w.Header().Set("Access-Control-Allow-Origin", "http://www.example.com,http://example.com")
也不是这样
w.Header().Set("Access-Control-Allow-Origin", "http://www.example.com")
w.Header().Set("Access-Control-Allow-Origin", "http://example.com")
那么,有没有办法让我得到请求的来源?所以我可以动态地允许域?我还有其他方法可以解决这个问题吗?
最佳答案
我发现Origin信息在http.Request对象中。您可以通过
获取来源origin := r.Header.Get("Origin");
假设你有一个像这样的对象
r *http.Request
如果对象来自 example.com,它将返回 example.com,同样是 www.example.com。然后,您可以测试它是否是这两个值之一作为一种身份验证方式。
关于http - golang http 允许带有 www 和不带 www 的特定域名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47298310/