Django解决跨域问题

原理:浏览器的同源策略,其实我们的请求发送过去了,服务器也进行响应了,就是浏览器把响应给阻止响应而已

第一种方法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',
)

看完之后,你可能觉得跟第二种方法一样嘛!原理都一样的啦,实现方式不同而已。

posted @ 2019-04-28 20:38  Tanglaoer  阅读(667)  评论(0编辑  收藏  举报