本文介绍了在Golang中启用CORS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好我正在实施休息apis,为此我想允许交叉来源请求。



我目前在做什么:



AWS上的Go-server代码:

  func(c * UserController)Login(w http.ResponseWriter,r * http.Request,ctx * rack.Context){
w.Header()。Set(Access-Control-Allow-Origin,r.Header.Get(Origin))
w.Header()。Set(Access-Control-Allow-Methods,POST,GET,OPTIONS,PUT,DELETE)
...
...
c.render.Json(w,rsp,http.StatusOK)
return
}

本地主机上的Ajax代码:

 < script> 
$(document).ready(function(){
console.log(ready!);
$ .ajax({
url:'http:// ip :8080 / login',
crossDomain:true,//设置为跨域请求
withCredentials:false,
类型:'post',
成功:函数(数据) {
alert(Data+ data);
},
});
});


我收到以下错误在浏览器控制台上:
XMLHttpRequest无法加载。请求的资源上没有Access-Control-Allow-Origin标题。因此不允许访问原始的'。

pre> func corsRoute(app * app.App){
allowedHeaders:=Accept,Content-Type,Content-Length,Accept-Encoding,Authorization,X-CSRF-Token

f:= func(w http.ResponseWriter,r * http.Request){
如果origin:= r.Header.Get(Origin);原始!={
w.Header()。Set(Access-Control-Allow-Origin,*)
w.Header()。Set(Access-Control-Allow (),POST,GET,OPTIONS,PUT,DELETE)
w.Header()。Set(Access-Control-Allow-Headers,allowedHeaders)
w.Header()。 Set(Access-Control-Expose-Headers,Authorization)
}
return
}
app.Router.Options(/ * p,f,publicRouteConstraint )
}

但它不起作用。


$

解决方案

感谢您的提示 - 这些都在标题中!我只在服务器端使用这些golang头文件:

  w.Header()。Set(Content-Type, text / html; charset = utf-8)
w.Header()。Set(Access-Control-Allow-Origin,*)
pre>

现在可以使用这个JQuery:

 < script 
src =https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js>
< / script>
< script>
$ .ajax({
类型:'GET',
url:'https://www.XXXXXXX.org/QueryUserID?u=juXXXXny&p=blXXXXXne',
crossDomain:true,
dataType:'text',
成功:function(responseData,textStatus,jqXHR){
alert(responseData);
},
error :function(responseData,textStatus,errorThrown){
alert('POST failed。');
}
});
< / script>


Hi I'm implementing rest apis and for that I want to allow cross origin requests to be served.

What I am currently doing:

Go-server code on AWS:

func (c *UserController) Login(w http.ResponseWriter, r *http.Request, ctx *rack.Context) {
w.Header().Set("Access-Control-Allow-Origin", r.Header.Get("Origin"))
w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
...
...
c.render.Json(w,rsp, http.StatusOK)
return
}

Ajax code on localhost:

<script>
$( document ).ready(function() {
    console.log( "ready!" );
    $.ajax({
        url: 'http://ip:8080/login',
        crossDomain: true, //set as a cross domain requests
        withCredentials:false,
        type: 'post',
        success: function (data) {
            alert("Data " + data);
        },
    });
});

I am getting the following error on browser console:XMLHttpRequest cannot load http://ip:8080/login. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8081' is therefore not allowed access. The response had HTTP status code 422.

I tried adding preflight options:

func corsRoute(app *app.App) {
allowedHeaders := "Accept, Content-Type, Content-Length, Accept-Encoding, Authorization,X-CSRF-Token"

f := func(w http.ResponseWriter, r *http.Request) {
    if origin := r.Header.Get("Origin"); origin != "" {
        w.Header().Set("Access-Control-Allow-Origin", "*")
        w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
        w.Header().Set("Access-Control-Allow-Headers", allowedHeaders)
        w.Header().Set("Access-Control-Expose-Headers", "Authorization")
    }
    return
}
app.Router.Options("/*p", f, publicRouteConstraint)
}

But it is not working.

What can be done to fix it.

解决方案

Thanks for the clue - it's all in the header! I use only these golang headers on the server side:

w.Header().Set("Content-Type", "text/html; charset=utf-8")
w.Header().Set("Access-Control-Allow-Origin", "*")

Now works with this JQuery:

<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
<script>
$.ajax({
    type: 'GET',
    url: 'https://www.XXXXXXX.org/QueryUserID?u=juXXXXny&p=blXXXXXne',
    crossDomain: true,
    dataType: 'text',
    success: function(responseData, textStatus, jqXHR) {
        alert(responseData);
            },
    error: function (responseData, textStatus, errorThrown) {
        alert('POST failed.');
    }
});
</script>

这篇关于在Golang中启用CORS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-17 12:43
查看更多