跨域问题
1、 跨域问题:
跨域发生的原因(什么是跨域)?
首先 跨域发生在前后端分离的项目中 ,前端静态资源服务器(服务器A) ,后端服务器(服务器B)
在浏览器中 我们 在地址栏 输入服务器A 的域名 ,服务器A会返回 html ,css,js。代码 我们通过js访问 服务器B的资源 就会发生----跨域
简述:服务器A的js通过 ajax访问服务器B下的资源
跨域的结果是什么?
通过 js发送get请求 服务器B会接收请求 但不会返回结果
通过js发送post,put,patch,delete请求 服务器B js内部会先发送一个options请求的试探 如果返回200OK 则会继续请求,否则则停止请求
options请求简述: 跨域的一次预检,判断后端是否允许返回资源(服务器是默认拒绝的)
2、解决(django)
options请求 需要服务器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']
]
在中间件中 设置 :corsheaders.middleware.CorsMiddleware 写在第一项
添加白名单: (只有白名单中的地址 才可以访问服务器B的资源)
CORS_ORIGIN_WHITELIST = (
'127.0.0.1:8080',
'localhost:8080',
)
CORS_ALLOW_CREDENTIALS = True # 允许携带cookie