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
    
    
  • 相关阅读:
    Indy的TCPServer到底能支持多少个连接
    Delphi TStream 详细介绍
    WebAPI下的如何实现参数绑定
    使用 Weinre 调试移动网站及 PhoneGap 应用
    面向对象的三大特征:封装、继承、多态
    轻量级前端MVVM框架avalon
    三种工厂模式的分析以及C++实现
    简单实现TCP下的大文件高效传输
    Nunit NMock Ncover单元测试
    算法实践——数独的基本解法
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10651766.html
Copyright © 2011-2022 走看看