• DRF--跨域问题解决


    1.什么是跨域?
            跨域是因为浏览器的同源策略导致的,也就是说浏览器会阻止非同源的请求。那什么是非同源呢?既域名不同,端口不同,都属于非同源的。比如我们用vue写了个前端页面,端口为8081,Django写了个后台,端口为8000,前端往后台提交数据,后台返回数据会被浏览器拦截,因为端口不同。这就是跨域。

    浏览器只阻止表单以及ajax请求,并不会阻止src请求。所以我们得CDN,图片等src都可以发送。

    跨域请求分为两种,一种是简单请求,一种是复杂请求。

            1.1 简单请求
                    HTTP方法是下列方法之一 :HEAD、GET、POST
                    HTTP头信息不超过以下几种字段:Accept,Accept-Language、Content-Language、

                            Last-Event-ID,application/x-www-from-urlencode,multpart/from-data,text/plain
            1.2 复杂请求 
                    任何一个不满足上述要求的情求,都认为是复杂请求,复杂请求会先发出一个预请求,

                    我们也叫预检,OPTIONS请求比如发送了一个post请求,

                    Content-Type为application/json,这就是复杂请求

    2.解决跨域:

            使用第三方库解决跨域的问题

            2.1.安装第三方库django-cors-headers

                    pip3 install django-cors-headers

            2.2.django-cors-headers是一个app,所以需要我们在settings.py里的app里注册 corsheaders,尽量放在前面

     

            2.3.添加中间件,需要放在 'django.middleware.common.CommonMiddleware' 中间件之前

                    'corsheaders.middleware.CorsMiddleware'


            2.4.添加白名单

    1. CORS_ALLOW_CREDENTIALS = True # 允许跨域时携带Cookie,默认为False
    2. CORS_ORIGIN_ALLOW_ALL = True # 所有ip都可以访问后端接口
    3. # CORS_ORIGIN_WHITELIST = ["http://127.0.0.1:8080",["http://192.168.10.1:8080"] # 指定能够访问后端接口的ip或域名列表
    4. # 允许访问的请求方法
    5. CORS_ALLOW_METHODS = (
    6. 'DELETE',
    7. 'GET',
    8. 'OPTIONS',
    9. 'PATCH',
    10. 'POST',
    11. 'PUT',
    12. 'VIEW',
    13. )
    14. # 允许的headers
    15. CORS_ALLOW_HEADERS = (
    16. 'accept',
    17. 'accept-encoding',
    18. 'authorization',
    19. 'content-type',
    20. 'dnt',
    21. 'origin',
    22. 'user-agent',
    23. 'x-csrftoken',
    24. 'x-requested-with',
    25. )


    这样就可以解决跨域的问题
            

  • 相关阅读:
    如何处理C语言中的异常?
    【RT-Thread】nxp rt10xx 设备驱动框架之--pwm搭建和使用
    LeetCode(力扣)491. 递增子序列Python
    【Python笔记-设计模式】装饰器模式
    常见逻辑漏洞总结
    HTTP(三)HTTP常见的状态码
    什么是自动化测试框架?如何搭建自动化测试框架详解
    c++源码编译过程(翻译阶段)的若干细节概要
    Java 异常处理
    依赖注入
  • 原文地址:https://blog.csdn.net/qq_40132294/article/details/125891314