跨域问题
跨域问题
1.出现跨域问题的原因
-同源策略(浏览器的安全策略)
-只允许当前页面朝当前域下发请求,如果向其他域发请求,请求可以正常发送,数据也可以拿回,但是被浏览器拦截了
2.解决跨域问题
-cors:只要服务器实现了CORS,就可以实现跨域资源共享
-简单请求
-只发一次请求
-非简单请求:
-发两次请求:一次预检(OPTION请求),只有服务端允许发请求,才能继续发第二次正常请求,一次真正的请求
代码实现:
写一个中间件在中间件允许cors,如此就解决了全站的跨域问题
原理:根据django的请求的生命周期,所有的请求都会先经过中间件,所以在中间件中允许cors也就解决了跨域问题
1.写一个中间件交myMiddle.py
from django.utils.deprecation import MiddlewareMixin
class MyCorsMiddle(MiddlewareMixin):
def process_response(self,request,response):
# 简单请求:
# 允许http://127.0.0.1:8001域向我发请求
# ret['Access-Control-Allow-Origin']='http://127.0.0.1:8001'
# 允许所有人向我发请求
response['Access-Control-Allow-Origin'] = '*'
if request.method == 'OPTIONS':
# 所有的头信息都允许
response['Access-Control-Allow-Headers'] = '*'
return response
2.在setting中注册myMiddle.py
MIDDLEWARE = [
'api01.myMiddle.MyCorsMiddle'
]