10

これは長くなるでしょう:

わかりましたので、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リクエストを達成するのに近づいていると思いますが、それをすべて説明する例が見つかりません。

助けてください。

4

3 に答える 3