解決思路
如何解決這種情形的問(wèn)題呢?
瀏覽器同源策略有條規(guī)則,Response頭部如果包含如下字段值,則不做CORS檢查。
Access-Control-Allow-Origin: *
解決方法:通過(guò) django-cors-headers 庫(kù)來(lái)實(shí)現(xiàn)
1): 安裝:
pip install django-cors-headers
2) 修改 settings.py 配置文件
添加到應(yīng)用列表
INSTALLED_APPS = ( ##... 'corsheaders' )
corsheaders.middleware.CorsMiddleware
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'corsheaders.middleware.CorsMiddleware', ......
然后,添加下面配置 允許所有 domain 訪問(wèn)
CORS_ORIGIN_ALLOW_ALL = True
或者,允許某些域訪問(wèn)
CORS_ORIGIN_ALLOW_ALL = False # 允許域名加入白名單 CORS_ORIGIN_WHITELIST = ( 'http//:localhost:8000', )
至此,Django端已經(jīng)解決了跨域問(wèn)題,如果有問(wèn)題,一是注意步驟是否有遺漏, 二是注意 瀏覽器端是否有清緩存(個(gè)人在這里因?yàn)闆](méi)有清緩存,花了很長(zhǎng)時(shí)間,電腦重啟了都沒(méi)有起作用)
說(shuō)明
在測(cè)試環(huán)境中,可以允許所有domain來(lái)訪問(wèn),以避免 CORS問(wèn)題,前后端分離項(xiàng)目在生產(chǎn)環(huán)境下,通常應(yīng)該部署在同域下,
如果確實(shí)需要跨域,則將前端域名添加到白名單 CORS_ORIGIN_WHITELIST
配置項(xiàng)中,禁止其它域訪問(wèn)。