zoukankan      html  css  js  c++  java
  • CORS的原理及应用

    CORS的原理及应用

    CORS是跨站资源共享,同样是解决浏览器的同源策略

    其本质是设置响应头,使得浏览器允许跨域请求。

    第三方网站返回数据的时候在浏览器的响应头中添加允许的域名,允许所有的用*

    1 简单请求

    简单请求是只发一次请求

    ajax请求不变,第三方后台修改

    s4的后台,在返回值中添加允许的域名和端口,注意不同后面写具体的域名,自己出错是在后面加上了cors

    允许所有的,用*

    def new_users(request):
        print('请求is coming')
        user_list = [
            'aaa',
            'bbb',
            'ccc'
        ]
        user_list_str = json.dumps(user_list)
        obj = HttpResponse(user_list_str)
        obj['Access-Control-Allow-Origin']='http://www.s5.com:8000'
        # obj['Access-Control-Allow-Origin']='*'
        return obj
    
    

    s5前端没有改变

         <input type="button" value="获取用户列表" onclick="getUsers();" />
            <script src="/static/jquery-3.2.1.js"></script>
            <script>
                function getUsers(){
                    $.ajax({
                        url: 'http://www.s4.com:8001/new_users/',
                        type:"GET",
                        success:function(arg){
                            console.log(arg);
                        }
                    })
                }
            </script>
    

    1 非简单请求

    两次请求,在发送数据之前会先发一次请求用于做“预检”,只有“预检”通过后才再发送一次请求用于数据传输

    第一次发送的是OPTION请求,在OPTION中进行校验,只有校验通过才能发其他的请求

    如发送DELETE请求,第一次接受的是OPTIONS请求

    s5前端

    <input type="button" value="获取用户列表" onclick="getUsers();" />
            <script src="/static/jquery-3.2.1.js"></script>
            <script>
                function getUsers(){
                    $.ajax({
                        url: 'http://www.s4.com:8001/new_users/',
                        type:"DELETE",  //delete是复杂请求
                        success:function(arg){
                            console.log(arg);
                        }
                    })
                }
            </script>
    

    s4后台

    注意是OPTIONS,

    def new_users(request):
        print(request.method)
        if request.method == "OPTIONS":
            obj = HttpResponse()
            obj['Access-Control-Allow-Origin']='*'
            obj['Access-Control-Allow-Methods'] = "DELETE"  # 允许DELETE
            return obj
        user_list = [
            'aaa',
            'bbb',
            'ccc'
        ]
        user_list_str = json.dumps(user_list)
        obj = HttpResponse(user_list_str)
        obj['Access-Control-Allow-Origin'] = '*'
        return obj
    
    

    参考:

    http://www.cnblogs.com/wupeiqi/articles/5703697.html

  • 相关阅读:
    【IDEA】(4)---很好用的DEBUG功能
    【IDEA】(3)---非常实用提高开发效率和水平的插件
    【IDEA】(2)---MAC代码模版
    【IDEA】(1)---MAC下常用快捷键
    Shell(2)—数组
    MySQL(12)---纪录一次left join一对多关系而引起的BUG
    MySQL(11)---约束
    Shell(1)---变量
    算法(2)---算法复杂度理论
    MySQL(10)---自定义函数
  • 原文地址:https://www.cnblogs.com/Python666/p/7141048.html
Copyright © 2011-2022 走看看