问题描述
您好我正在实施休息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标题。因此不允许访问原始的'。
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)
pre>
w.Header()。Set(Access-Control-Allow-Origin,*)
现在可以使用这个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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!