zoukankan      html  css  js  c++  java
  • 跨域问题和django中实现跨域

    跨域问题

    
    1.同源策略(浏览器的安全功能):
        请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同
    
    
    2.CORS跨域资源共享
    实现CORS通信的关键是服务器,只要服务器实现了CORS接口,就可以跨源通信
    
    3.CORS请求分为简单请求和非简单请求
    
    
    4.只要符合以下两个条件,就是简单请求,否则就是非简单请求
    (1) 请求方法是以下三种方法之一:
    HEAD , GET ,POST
    (2)HTTP的头信息不超出以下几种字段:
    Accept, Accept-Language ,Content-Language ,Last-Event-ID
    Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
    
    #浏览器会判断是简单请求还是非简单请求,进行发送,区别如下
    简单请求只发一次请求
    非简单请求发两次:一次是OPTIONS预检请求,一次是真实的请求
    
    5.支持跨域,简单请求
    Access-Control-Allow-Origin = '域名' 或 '*'
    
    支持跨域,复杂请求
    由于复杂请求时,首先会发送“预检”请求,如果“预检”成功,则发送真实数据。
    “预检”请求时,允许请求方式则需服务器设置响应头:Access-Control-Request-Method
    “预检”请求时,允许请求头则需服务器设置响应头:Access-Control-Request-Headers
    
    

    django中实现跨域

    局部实现跨域
    def test(request):
        import json
        obj=HttpResponse(json.dumps({'name':'lqz'}))
        # obj['Access-Control-Allow-Origin']='*'
        obj['Access-Control-Allow-Origin']='http://127.0.0.1:8004'
        return obj
    
    全局实现跨域
    #跨域时请求会发送到服务器,只是服务器不会正确的响应,故要实现全局跨域,需要自定义中间件,改写process_response将CORS接口设置为允许跨域
    
    from django.utils.deprecation import MiddlewareMixin
    class CorsMiddleWare(MiddlewareMixin):
        def process_response(self,request,response):
            if request.method=="OPTIONS":
                #可以加*,可以使用逗号,写多个头或方法
                response["Access-Control-Allow-Headers"]="Content-Type"
                response["Access-Control-Allow-Methods"]="PUT,DELETE"
            #处理简单跨域,不可以使用逗号分隔,增加多个允许的域,可以先定义变量ip_list =[],放入允许的域,判断ip = request.META.get('REMOTE_ADDR')是否在ip_list内,在的话将response['Access-Control-Allow-Origin']=ip
            response["Access-Control-Allow-Origin"] = "http://localhost:8080"
            return response
    
    
  • 相关阅读:
    企业库连接形式简单例子记录 EnterpriseLibrary.Data
    .net 抽象类(abstract)和接口(interface)区别
    windows service 开发、安装及调试
    asp.net(mvc) 框架
    获取IP地址
    select2 模糊查询远程数据
    设计模式篇——初探命令模式
    初探MVC路由
    初探表达式目录树
    C#实现插入排序法
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10651766.html
Copyright © 2011-2022 走看看