2017-07-11 97 views
1

我正在使用falcon_cors在python中創建寧靜的服務。如果用戶界面發送來自不同域的http請求,瀏覽器將首先發送OPTIONS請求。但我在瀏覽器上得到以下錯誤:如何通過falcon_cors啓用`OPTIONS`請求?

XMLHttpRequest無法加載http://localhost:8000/user/。對 預檢請求的響應未通過訪問控制檢查:響應中的'Access-Control-Allow-Credentials'標頭的值爲'',當請求的憑證模式爲'include'時,其中 必須爲'true' 。 原因'http://localhost:4200'因此不允許訪問。由XMLHttpRequest發起的請求的憑證模式 由withCredentials屬性控制。

我已經搜索到我需要允許來自後端的OPTIONS來處理這個請求。所以,我寫我的代碼如下:

f_cors = falcon_cors.CORS(allow_origins_list=[ 
    'http://localhost:4200', 
    'http://127.0.0.1:4200', 
    ], 
    allow_all_headers=True, allow_all_methods=True) 

app_pre_beaker = falcon.API(middleware=[ 
    f_cors.middleware 
]) 

我已經創造falcon_cors指定allow_all_methods=True但我仍然得到同樣的錯誤。我還需要更新哪些內容?

回答

0

問題中的錯誤消息指出的問題與OPTIONS請求無關。

相反,問題似乎是服務器發送了一個Access-Control-Allow-Credentials響應標頭,其中包含一個空值。要解決該問題,您需要配置服務器以發送Access-Control-Allow-Credentials: true。也就是說,標題值必須是「true」。

如果服務器沒有以Access-Control-Allow-Credentials: true響應,那麼您的瀏覽器阻止您的前端代碼無法訪問響應 - 因爲您的前端JavaScript代碼在發送到服務器的請求中包含憑據,在這種情況下, CORS協議要求服務器用Access-Control-Allow-Credentials: true進行響應。

+0

是的,你是對的。在'falcon_cors.CORS'調用中添加'allow_credentials_all_origins = True'後,它運行良好。 –