我在swagger.mydomain.com上運行swagger(docker:swaggerapi/swagger-ui),在a.mydomain.com和b.mydomain.com上運行兩個定義為api的服務器
。a和b都是flask(python)服務器。a.mydomain.com由于在第四個子域上為一個webapp提供服務,已經設定了一段時間的CORS。這在該子域以及swagger中都運行良好。現在我為 b.mydomain.com 做了同樣的 CORS 設定,但是沒有成功。
兩臺服務器上的設定都是這樣的:
fromflask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app, origins=r"^.*(mydomain.com)")
正如我所說的,這在a.mydomain.com上是有效的,但在b.mydomain.com上卻不行。
預檢看起來是一樣的,除了尿液、狀態代碼(分別為200和400)以及作業請求有一個額外的allow。POST, OPTIONS頭。我沒有看到任何代碼上的差異來證明這個額外的頭資訊。
失敗的預檢請求需要150ms,是作業請求的兩倍。
通過 swagger 執行請求提供了一個 curl 請求。在本地執行這個請求可以得到預期的輸出,所以這個請求一般來說是正確的。
我不知道還有什么可以嘗試的。在我看來,a和b.mydomain.com的設定是完全一樣的。這里可能有什么問題呢?
uj5u.com熱心網友回復:
對于預檢回應來說,400是一個相當不尋常的回應代碼。這表明端點可能被配置為期望在請求中獲得某種請求體/負載或頭資訊,而不管請求的HTTP方法是什么。但是由于對于預檢OPTIONS請求,瀏覽器沒有發送任何請求體和額外的頭資訊,服務器代碼沒有收到它所期望的東西。
對于這種情況,修復方法是確保為該路由/終端配置一個特定的、單獨的OPTIONS請求處理器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/329836.html
標籤:
