我正在写一个 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)
}
Run Code Online (Sandbox Code Playgroud)
这使得任何人都可以访问我的 api。我想将其限制为我的域名。因为这听起来更安全。我们称之为 www.example.com
我可以将其更改为
w.Header().Set("Access-Control-Allow-Origin", "http://www.example.com")
Run Code Online (Sandbox Code Playgroud)
这将允许我在 url 为 www.example.com 但不是 example.com 时拨打电话
然后我可以将其更改为
w.Header().Set("Access-Control-Allow-Origin", "http://example.com")
Run Code Online (Sandbox Code Playgroud)
现在我可以从 example.com 访问我的 api,但不能从 www.example.com 访问我的 api
添加两者都不起作用 两种方式都行不通
w.Header().Set("Access-Control-Allow-Origin", "http://www.example.com,http://example.com")
Run Code Online (Sandbox Code Playgroud)
也不是这样
w.Header().Set("Access-Control-Allow-Origin", "http://www.example.com")
w.Header().Set("Access-Control-Allow-Origin", "http://example.com")
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法让我获得请求的来源呢?这样我就可以动态允许该域?我还有其他方法可以解决这个问题吗?
我发现Origin信息在http.Request对象中。你可以通过以下方式获取原点
origin := r.Header.Get("Origin");
Run Code Online (Sandbox Code Playgroud)
假设你有一个像这样的物体
r *http.Request
Run Code Online (Sandbox Code Playgroud)
如果对象来自 example.com,它将返回 example.com,同样返回 www.example.com。然后,您可以测试它是否是这两个值之一作为身份验证的方式。
| 归档时间: |
|
| 查看次数: |
4860 次 |
| 最近记录: |