これは長くなるでしょう:
わかりましたので、Google App Engine でホストされている Python webapp2 REST API にリクエストを送信する Google カレンダー ガジェットを開発しています。
CORSのために許可されていないものをPOSTしようとすると、問題が発生します。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 - 'Origin localhost は Access-Control-Allow-Origin で許可されていません'
追加する必要があると書かれています
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 リクエストを行うことができますが、これを使用せずに行う方法を学びたいと思います。
また、私のWebサーバーにはこれがあります:
...
class webService(webapp2.RequestHandler):
options(self):
self.response.write('options')
post(self):
self.response.write('post')
application = webapp2.WSGIApplication([
('/', MainPage),
('/service', webService)
], debug=True)
Web サーバーに何かを追加する必要があるかどうかもわかりませんし、そうしなければならないという情報も見つかりませんでした。また、CORSリクエストを達成するのに近づいていると思いますが、それをすべて説明する例が見つかりません。
助けてください。