CORS:跨域資源共享,是一種跨域訪問的W3C標準,它容許瀏覽器能夠跨源服務器進行請求,可讓ajax實現跨域訪問。出現跨域問題的緣由是瀏覽器同源策略致使的,協議+域名+端口三者一致被認爲是同源。網站出現同源策略問題,即:出現了未經容許的跨域請求。ajax
同源策略下的限制:django
CORS原理: 瀏覽器與服務器經過一些HTTP協議頭來作一些約定和限制,使用了額外的 HTTP 頭來告訴瀏覽器,容許 Web 應用服務器進行跨域訪問。從而使跨域數據傳輸得以安全進行。當一個資源從與該資源自己所在的服務器不一樣的域、協議或端口請求一個資源時,資源會發起一個跨域 HTTP 請求。本質原理是在服務器的response header中加入「Access-Control-Allow-Origin: *」便可實現跨域訪問。但注意並不必定是瀏覽器限制了發起跨站請求,也多是跨站請求能夠正常發起,可是返回結果被瀏覽器攔截了。json
解決方式:flask
一、經過Ajax獲取json數據時,存在跨域的限制。可是在Web頁面上調用js的script腳本文件時卻不受跨域的影響,因此可使用JSONP來實現跨域的傳輸。所以,咱們須要將Ajax調用中的dataType從JSON改成JSONP(相應的API也須要支持JSONP)格式。注意:JSONP只能用於GET請求。跨域
2.一、Django瀏覽器
def myview(_request): response = HttpResponse(json.dumps({"key": "value", "key2": "value"})) response["Access-Control-Allow-Origin"] = "*" response["Access-Control-Allow-Methods"] = "POST, GET, OPTIONS" response["Access-Control-Max-Age"] = "1000" response["Access-Control-Allow-Headers"] = "*" return response
2.2、Flask:安裝
flask_cors
擴展,官方文檔安全