引子
與Egret進行通信的時候,報了一個XMLHttpRequest cannot load '', NO 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '' is therefore not allowed access.
的錯誤,沒有前端相關知識的我,還以爲是我的HTTP響應報文寫錯了,後面問了大佬後,瞭解到是一個跨域問題。大佬指出後有點懵,尋思啥是跨域,沒學過呀。。。問了老師後纔算是瞭解了跨域問題的出現緣由,然後再是查了一些資料,解決了這個問題。
解決方案
最直接的方法,直接在原有的HTTP響應報文,添加三個首部行,其實可能一個就可以了,就是報錯裏要求的Access-Control-Allow-Origin
。
代碼:
# 允許跨域訪問的域名:若有端口需寫全(協議+域名+端口),若沒有端口末尾不用加'/'
self.response_head['Access-Control-Allow-Origin'] = '*'
# 提示OPTIONS預檢時,後端需要設置的兩個常用自定義頭
self.response_head['Access-Control-Allow-Headers'] = 'Content-Type'
# 允許前端帶認證cookie:啓用此項後,上面的域名不能爲'*',必須指定具體的域名,否則瀏覽器會提示
self.response_head['Access-Control-Allow-Credentials'] = 'GET,POST,OPTIONS'
大佬的解決方案:
python 跨域處理方式
前端常見跨域解決方案(全)