2017-02-05 15 views
1

私はTornadoに問題があります。私はTornadoでPUT HTTPメソッド用のAPIエンドポイントを持っています。また、jQueryとAJAXを使ってこのAPIにリクエストを送信するWebアプリケーションもありますが、リクエストがHTTPメソッドOPTIONSになっているため、常に405応答が返されます。 私はそれが動作する方法を理解し、私はそれを可能にするために私のTornado Serverを設定しました。しかし、それでも私はこのような状況にあります。 誰かが私を助けることができますか?Python Tornado - CORS PUT

私のサーバーコードがあります:

class BaseHandler(RequestHandler): 
    def __init__(self, *args, **kwargs): 
     super(BaseHandler, self).__init__(*args, **kwargs) 
     self.set_header('Cache-Control', 'no-store, no-cache, must- revalidate, max-age=0') 
     self.set_header("Access-Control-Allow-Origin", "*") 
     self.set_header("Access-Control-Allow-Headers", "Content-Type") 
     self.set_header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS') 

感謝

答えて

0

あなたはPUTメソッドの戻り値405

class Handler(tornado.web.RequestHandler): 
    def put(self): 
     self.set_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') 
     self.set_header("Access-Control-Allow-Origin", "*") 
     self.set_header("Access-Control-Allow-Headers", "Content-Type") 
     self.set_header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS') 

を定義しない場合は、[I 170205午前4時56分35秒ウェブ:1971] 200 PUT

+0

ご回答いただきありがとうございます。 このスニペットは、他のハンドラで継承する親クラスのスニペットです。 私は特定のハンドラでPUTメソッドの実装を持っています:) –

1

あなただけの無いボディとヘッダを送信optionsハンドラを追加する必要があります。

def options(self): 
    # no body 
    self.set_status(204) 
    self.finish() 

は、完全なコードスニペット用Tornado server: enable CORS requestsを参照してください。

もないとだけthe tornado-cors packageをインストールします。あなたのために必要なハンドラを追加し、ヘッダが送信されます右の応答性を確保します

pip install tornado-cors 

関連する問題