• 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',
    )

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

  • 相关阅读:
    新的开始——3.3
    第一个周末——3.2
    恋爱知识大增——周五3.1
    相安无事——周四2.28
    好几天没写了。。。——周三2.27
    开学第二天——2.26
    开学第一天——2.25
    华为
    微软 Microsoft
    谷歌 google
  • 原文地址:https://www.cnblogs.com/tangkaishou/p/10786412.html
Copyright © 2020-2023  润新知