原理:浏览器的同源策略,其实我们的请求发送过去了,服务器也进行响应了,就是浏览器把响应给阻止响应而已
第一种方法jsonp
因为浏览器不对 <script> 标签里面的src属性进行阻止,而对 ajax 的请求进行阻止,所以jsonp的原理就是动态创建一个 <script> 然后进行销毁,有时候我们利用浏览器的检查查看网页代码的时候,看见网页代码动一下就是这么回事。
第二种方法 修改response响应头【建议在中间件中操作--高大上!哈哈】
这个是利用HTTP的协议的响应头来处理的啦,可以查阅相关资料深入了解,这里就贴上常用的设置响应头
# 允许你的域名来获取我的数据
response['Access-Control-Allow-Origin'] = "*"
# 允许你携带Content-Type请求头
response['Access-Control-Allow-Headers'] = "Content-Type"
# 允许你发送DELETE,PUT
response['Access-Control-Allow-Methods'] = "DELETE,PUT"
第三种方法 也是最方便的方法【借助第三方cors组件】
自己去pypi官网搜索 django-cors ,然后下载第三方组件进行使用。下面就是步骤
pip install django-cors-headers
INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', # 注意顺序!
...
)
#跨域增加忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
'*'
)
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Pragma',
)
看完之后,你可能觉得跟第二种方法一样嘛!原理都一样的啦,实现方式不同而已。