zoukankan      html  css  js  c++  java
  • 跨源请求cors和jsonp

    0、产生跨域的原因

    浏览器的同源策略

    什么是浏览器的同源策略?

      src开发

      ajax禁止

    解决方法

    jsonp

      通过src绕过浏览器的同源策略

      缺点:只发送GET请求

    cors

      通过设置相应头

      分类

        简单请求  

        复杂请求  options 预检

    一、cors(常用简单)

    1、http://127.0.0.1:8000

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h2>django</h2>
    <input type="button" name="" id="getService" value="获取python的数据">
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
    <script>
        $("#getService").on('click', function () {
            // alert(123)
            $.ajax({
                // 目标域,获取数据
                url: "http://127.0.0.1:8002/service/",
                type: "get",
                success: function (data) {
                    console.log(data)
                    // console.log(typeof data)
                }
            });
        })
    </script>
    </body>
    </html>

    2、http://127.0.0.1:8002

    def service(request):
        dic = {"name": "python"}
        response = HttpResponse(json.dumps(dic))
        # 获取资源的ip
        response["Access-Control-Allow-Origin"] = "http://127.0.0.1:8000"
        return response

    CORS中间件

    https://www.cnblogs.com/wt7018/p/11531343.html

    二、jsonp

    1、http://127.0.0.1:8000

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h2>django</h2>
    <input type="button" name="" id="getService" value="获取python的数据">
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
    <script>
        $("#getService").on('click', function () {
            // alert(123)
            $.ajax({
                // 目标域,获取数据
                url: "http://127.0.0.1:8002/service/",
                type: "get",
                dataType: "jsonp",
                jsonp: "callbacks",
                // jsonpCallback: "abc",
                success: function (data) {
                    console.log(data)
                    // console.log(typeof data)
                }
            });
        })
    </script>
    </body>
    </html>

    2、http://127.0.0.1:8002

    def service(request):
        dic = {"name": "python"}
        dic_str = json.dumps(dic)
        func = request.GET.get("callbacks")
        print(func)
        return HttpResponse("{}('{}')".format(func, dic_str))
  • 相关阅读:
    c++赋值构造函数为什么返回引用类型?
    Problem B. Full Binary Tree
    编译器初始化全局变量,并分配虚拟内存
    Winter Storm Warning
    test
    雨崩徒步游记--三月的梅里雪山
    更高效的MergeSort--稍微优化
    malloc 实现原理
    2015-10-19 [有道]--研发工程师--1~3面
    2015-10-11 [滴滴]--研发工程师--1~4面
  • 原文地址:https://www.cnblogs.com/wt7018/p/11397492.html
Copyright © 2011-2022 走看看