2017-02-05 75 views
1

我正面臨龍捲風的問題。我有一個用於Tornado中PUT HTTP方法的API端點。我還有一個Web應用程序,它使用jQuery和AJAX將請求發送到此API,但始終得到405響應,因爲請求是以HTTP Method OPTIONS的形式進行的。 我瞭解它的工作方式,並且配置了我的龍捲風服務器以允許它。但即使如此,我也有這種情況。 有人可以幫我嗎?Python龍捲風 - 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秒web: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 

這將增加必要的處理給你,並確保頭被髮送正確的反應。