DRF跨域後端解決之django-cors-headers

二十一發表於2019-02-16

在使用django-rest-framework開發專案的時候我們總是避免不了跨域的問題,因為現在大多數的專案都是前後端分離,前後端專案部署在不同的web伺服器上,因為我們是後端程式設計師,因此我要通過後端的程式實現跨域。當然如果前端框架是Vue的話,則可以代理服務實現跨域,我也就知道一點點,如果有興趣,大家可以自行搜尋哦。
DRF後端實現跨域第三方擴充套件———djangocorsheaders,在介紹之前,我先介紹兩個概念:同源策略、跨域

同源策略

同源策略/SOP(Same origin policy)是一種約定,是瀏覽器的一種安全機制。這裡同源需要”協議+域名+埠”三者都相同,否則不能進行Ajax訪問。

跨域

不同源之間的網站通訊就是跨域。

安裝

pip install django-cors-headers

註冊

INSTALLED_APPS = (
    `corsheaders`,
)

新增中介軟體

MIDDLEWARE = [
    `corsheaders.middleware.CorsMiddleware`, #最好新增至第一行
]

配置白名單

#單個配置
CORS_ORIGIN_WHITELIST  =(
     ` 域名`,
)
#正則配置:
CORS_ORIGIN_REGEX_WHITELIST  =(r`^(https?://)?(w+.)?jim.com $`,)

或者直接允許所有主機跨域

CORS_ORIGIN_ALLOW_ALL = True 預設為False

請求頭及請求方法的配置:

#預設可以使用的非標準請求頭,需要使用自定義請求頭時,就可以進行修改
CORS_ALLOW_HEADERS = (
    `accept`,
    `accept-encoding`,
    `authorization`,
    `content-type`,
    `dnt`,
    `origin`,
    `user-agent`,
    `x-csrftoken`,
    `x-requested-with`,
)
#預設請求方法
CORS_ALLOW_METHODS = (
    `DELETE`,
    `GET`,
    `OPTIONS`,
    `PATCH`,
    `POST`,
    `PUT`,
)

防止CSRF

#新增信任的站點 django1.9引入
CSRF_TRUSTED_ORIGINS = (
    `change.allowed.com`,
)

一般情況下,我們配置這些就足夠,當然最為一個出名的擴充套件,肯定做的很完美,更多的配置,請訪問:https://github.com/ottoyiu/dj…

相關文章