1995年,同源政策由 Netscape 公司引入瀏覽器。目前,所有瀏覽器都實行這個政策。
同源策略是瀏覽器的一個安全功能,不同源的客戶端腳本(js文件)在沒有明確授權的情況下,不能讀寫對方資源。只有同一個源的腳本賦予dom、讀寫cookie、session、ajax等操作的權限。
url由協議、域名、端口和路徑組成,如果兩個url的協議、域名和端口相同,則這兩個url是同源的。
url | 是否同源 | 原因 |
---|---|---|
http://www.example.com/dir2/other.html | 是 | 協議、端口、主機相同 |
https://example.com/dir/other.html | 否 | 不同的協議(https) |
http://www.example.com:81 | 否 | 端口不同(81) |
http://news.example.com/ | 否 | 域名不同 |
跨域CORS
現在,前端與后端分別是不同的端口,這就涉及到跨域訪問數據的問題,因為瀏覽器的同源策略,默認是不支持兩個不同域名間相互訪問數據,而我們需要在兩個域名間相互傳遞數據,這時我們就要為后端添加跨域訪問的支持。
我們使用django-cors-headers來解決后端對跨域訪問的支持。
使用django-cors-headers擴展
參考文檔https://github.com/ottoyiu/django-cors-headers/
安裝
pip install django-cors-headers
添加應用 在setting.py
INSTALLED_APPS = ( ... 'corsheaders', ... )
中間層設置
MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', ... ]
添加白名單
# CORS CORS_ORIGIN_WHITELIST = ( '127.0.0.1:8080',
'127.0.0.1:8000',
'localhost:8080', ) CORS_ALLOW_CREDENTIALS = True # 允許攜帶cookie
- 凡是出現在白名單中的域名,都可以訪問后端接口
- CORS_ALLOW_CREDENTIALS 指明在跨域訪問中,后端是否支持對cookie的操作。