这会很长:
好的,所以我正在开发一个谷歌日历小工具,它将请求发送到托管在 Google App Engine 上的 Python webapp2 REST api。
当我尝试发布由于 CORS 而不允许我发布的内容时,问题就来了。在 Chromes 的 DevTools 中它说:
Method: OPTIONS.
Status: (failed) Request header field Content-Type is not allowed by Access-Control-Allow-Headers.
Origin https://hq34i4geprnp5vci191ljfuhcoerscl4-a-calendar-opensocial.googleusercontent.com is not allowed by Access-Control-Allow-Origin.
我知道这是因为 CORS。这里:
Ajax - 'Access-Control-Allow-Origin 不允许 Origin localhost'
它说我必须添加
Access-Control-Allow-Origin: *
到标题,但我又是 ajax 新手,我想知道它是否是这样完成的:
$.ajax({
type: "POST",
url: "https://myapp.appspot.com/service",
contentType: "application/json; charset=utf-8",
data: data,
beforeSend: function (request)
{
request.setRequestHeader("Access-Control-Allow-Origin", "*");
}
success: function(data) {
alert("AJAX done");
}
});
添加此标头输出不同(这让我想知道是否允许来源,尽管我真的不知道):
Method: OPTIONS.
Status: (failed) Request header field Content-Type is not allowed by Access-Control-Allow-Headers.
XMLHttpRequest cannot load https://myapp.appspot.com/service. Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers.
我什至发现了这个:
http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/
这让我可以做 GET 请求,但我想学习如何在没有这个的情况下完成它们。
同样在我的网络服务器上,我有这个:
...
class webService(webapp2.RequestHandler):
options(self):
self.response.write('options')
post(self):
self.response.write('post')
application = webapp2.WSGIApplication([
('/', MainPage),
('/service', webService)
], debug=True)
我不知道我是否必须向网络服务器添加更多内容,也没有发现必须添加的信息。此外,我认为我即将实现 CORS 请求,但是我找不到解释这一切的示例。
请帮忙。