一、同源策略
同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。所以a.com下的js脚本采用ajax读取b.com里面的文件数据时会报错的
二、跨域
受同源策略的影响,不是同源的脚本,不能操作其他源下面的对象。想要操作另一个源下的对象就需要跨域
跨资源共享CORS(Cross-origin resource sharing)
CORS采用新的'origin:'请求头和新的Access-Control-Allow-Origin响应头来扩展HTTP。它允许服务器用头信息显示地列出源,或使用通配符来匹配所有的源并允许任何地址请求文件。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。
从而它允许浏览器向跨源服务器,发出XMLHttpRequest请求,客服了AJAX只能同源使用的限制。
三、使用 django-cors-headers
3-1:安装
pip3 install django-cors-headers
3-2:在settings.py文件中添加应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'apps.users',
# 跨域访问
'corsheaders',
]
3-3:中间层设置
MIDDLEWARE = [
# CORS的配置,放在第一位
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
3-4:添加白名单
# 添加 django-cors-headers 的白名单, 使白名单中的 host 可以进行跨域请求
CORS_ORIGIN_WHITELIST = (
# 白名单:
'127.0.0.1:8080',
'localhost:8080',
'http://www.meiduo.site:8080',
'http://www.meiduo.site:8000',
)
# 允许携带cookie
CORS_ALLOW_CREDENTIALS = True
网友评论