http - golang http 允许带有 www 和不带 www 的特定域名

标签 http go cors

我有一个正在编写的 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/

相关文章:

c# - 如何通过 Angular $http 将字符串发送到 C# ASP.NET 后端?

javascript - 获取html源代码

Golang 检查数据是否为 ​​time.Time

Golang 中的 Json 解析

javascript - 跨域 XHR 失败

android - ASIHTTPRequest 等效于 Android 或任何 HTTP 请求管理器/包装器?

node.js - 使用 mocha 和 sinon 在 Node 中模拟 http 请求

html - 使用 Golang 渲染模板时,不会读取来自不同文件夹的 CSS 和图像

ruby-on-rails - 如何在Rails下的Webrick中设置access-control-allow-origin?

javascript - 发出 PUT 请求会导致在 PUT 之前先发送 OPTIONS 请求,为什么浏览器会这样?