跨域问题
跨域问题
同源策略
就是请求的url地址,必须与浏览器上的url地址一致,就是域名和带你看,协议都相同
这样是为了保护用户信息安全的一种机制,不同源的客户脚本在没用得到服务端的明确授权的情况下,浏览器会拒绝服务端的信息提供前端ajax
只要在在客户端请求地址出现这样的情况就是同源策略的拦截问题
Access-Control-Allow-Origin
这个关键字,就是访问受限
但是cors请求分成两类:简单请求和非简单请求
-
简单请求要满足下面的两个条件,就是简单请求
请求方法是以下三种方法之一 HEAD GET POST http的头信息不超过一下几种字段 Accept Accept-Language Content-Language Last-Event-ID Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
注意:
如果发送post请求,数据格式是json---> 非简单请求,非简单请求发送,一次options请求,一次正真的请求
后端处理,开启cors,跨云资源共享
第一种:
class MyMiddle(MiddlewareMixin): def process_response(self, request, response): response['Access-Control-Allow-Origin'] = '*' if request.method == "OPTIONS": # 可以加* response["Access-Control-Allow-Headers"] = "Content-Type" response["Access-Control-Allow-Headers"] = "authorization" return response
第二种:在settings中间件中配置
第三种:
-pip install django-cors-headers
-注册app:'corsheaders',
-配置中间件:corsheaders.middleware.CorsMiddleware
-setting中配置:
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALLOW_HEADERS = (
'authorization',
'content-type',
)