跨域問題
1、 跨域問題:
跨域發(fā)生的原因(什么是跨域)?
首先 跨域發(fā)生在前后端分離的項(xiàng)目中 ,前端靜態(tài)資源服務(wù)器(服務(wù)器A) ,后端服務(wù)器(服務(wù)器B)
在瀏覽器中 我們 在地址欄 輸入服務(wù)器A 的域名 ,服務(wù)器A會返回 html ,css,js。代碼 我們通過js訪問 服務(wù)器B的資源 就會發(fā)生----跨域
簡述:服務(wù)器A的js通過 ajax訪問服務(wù)器B下的資源
跨域的結(jié)果是什么?
通過 js發(fā)送get請求 服務(wù)器B會接收請求 但不會返回結(jié)果
通過js發(fā)送post,put,patch,delete請求 服務(wù)器B js內(nèi)部會先發(fā)送一個options請求的試探 如果返回200OK 則會繼續(xù)請求,否則則停止請求
options請求簡述: 跨域的一次預(yù)檢,判斷后端是否允許返回資源(服務(wù)器是默認(rèn)拒絕的)
2、解決(django)
options請求 需要服務(wù)器B的接口返回200OK 我們不太可能每一個接口都寫一個 (冗余),so 封裝
在django中 我們使用Cors來解決
包名:django-cors-headers github:https://github.com/adamchainz/django-cors-headers
安裝 : pip install django-cors-headers
在settings 中 INSTALL_APPS=[ 'corsheaders'] ]
在中間件中 設(shè)置 :corsheaders.middleware.CorsMiddleware 寫在第一項(xiàng)
添加白名單: (只有白名單中的地址 才可以訪問服務(wù)器B的資源)
CORS_ORIGIN_WHITELIST = (
'127.0.0.1:8080',
'localhost:8080',
)
CORS_ALLOW_CREDENTIALS = True # 允許攜帶cookie

浙公網(wǎng)安備 33010602011771號