我正在嘗試從 ionic 應用程式將資料傳送到 Google 雲端功能,但不斷收到以下錯誤:
從來源「http://localhost:8100」存取「https://xxxxxxxxxxxxxxx.cloudfunctions.net/upload_data」處的XMLHttpRequest 已被CORS 策略阻止:Access 不允許請求標頭欄位內容類型-預檢回應中的Control-Allow-Headers。
即使刪除請求標頭,也會顯示相同的錯誤。 如果有一點幫助,我們將不勝感激,謝謝。
我的打字稿程式碼:
var httpheader = new HttpHeaders(); httpheader.append('Accept','application/json'); httpheader.append('Content-Type','application/json'); let data = {"testbody":"this is test data"}; await this.http.post('https://xxxxxxxxxxxxxxxx.cloudfunctions.net/upload_data',data ,{headers:httpheader}).subscribe((resp)=>{ console.log(resp); });
python雲端函數:
def hello_world(request): """Responds to any HTTP request. Args: request (flask.Request): HTTP request object. Returns: The response text or any set of values that can be turned into a Response object using `make_response <http://flask.pocoo.org/docs/1.0/api/#flask.Flask.make_response>`. """ if request.method == 'OPTIONS': headers={'Access-Control-Allow-Origin':'*', 'Access-Control-Allow-Methods':'GET', 'Access-Control-Allow-Headrs':'Content-Type', 'Access-Control-Max-Age':'3600' } return ('',204,headers) headers={'Access-Control-Allow-Origin':'*'} request_json = request.get_json(silent=True) request_args = request.args if request_json and 'testbody' in request_json: testname = request_json['testbody'] elif request_args and 'testbody' in request_args: testname = request_args['testbody'] else: testname = 'Nothing sent' return (jsonify(testname),200,headers)
CORS
相關設定需要在伺服器端
程式碼中完成。從您的問題中,我看到您在Python
中使用Flask
框架。所以需要在Flask中配置CORS
如下:透過運行安裝flask-cors -
考慮以下範例端點程式碼:
更新
在
Production
環境中,請禁止禁止
使用Access-Control-Allow-Origin':'*'
。相反,您應該whitelist
您的網域。閱讀有關此內容的更多資訊此處和此處。此外,如果您將
Ionic 與 Capacitor
一起使用,我建議使用 Http 外掛程式。如果可能,您也可以編寫自己的自訂外掛程式
來使用底層作業系統平台特定的
API 實作網路呼叫natively
,因為這可以防止任何CORS 相關問題發生。參考連結:
Flask CORS 設定
允許 Flask 端點使用 CORS