zoukankan      html  css  js  c++  java
  • CORS 跨域

    CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
    它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
    优缺点

    优点:

    1.支持POST以及所有HTTP请求
    2.安全性相对JSOP更高
    3.前端要做的事儿比较少
    缺点:

    1.不兼容老版本浏览器,如IE9及其以下
    2.需要服务端支持
    3.使用起来稍微复杂了些
    怎么用?

    前端部分:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>CORS跨域请求</title>
    <script>
    function createCORSRequest(method, url) {
    var xhr = new XMLHttpRequest();
    if ("withCredentials" in xhr) {
    xhr.open(method, url, true);
    } else if (typeof XDomainRequest != "undefined") {
    xhr = new XDomainRequest();
    xhr.open(method, url);
    } else {
    xhr = null;
    }
    return xhr;
    }

    window.onload = function () {
    var oBtn = document.getElementById('btn1');
    oBtn.onclick = function () {
    var xhr = createCORSRequest("get", "http://wpdic.com/cors.php");
    if (xhr) {
    xhr.onload = function () {
    var json = JSON.parse(xhr.responseText);
    alert(json.a);
    };
    xhr.onerror = function () {
    alert('请求失败.');
    };
    xhr.send();
    }
    };
    };
    </script>
    </head>
    <body>
    <input type="button" value="获取数据" id="btn1">
    </body>
    </html>
    注意点:

    1.上面代码兼容IE8,因为用了XDomainRequest

    2.其它代码你就当成XMLHttpRequset用,别考虑什么2.0不2.0的

    3.如果你想post数据,可以往 xhr.send()里面搞

    4.这里不建议大家研究"simple methdod"之类的知识,代码弄懂了会用就行,遇到问题了再查也不晚

    后台部分:

    <?php
    header('content-type:application:json;charset=utf8');
    header('Access-Control-Allow-Origin:*');
    header('Access-Control-Allow-Methods:GET,POST');
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Allow-Headers:x-requested-with,content-type');
    $str = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
    echo $str;
    ?>
    注意点:

    1.Access-Control-Allow-Origin:* 表示允许任何域名跨域访问,如果需要指定某域名才允许跨域访问,只需把Access-Control-Allow-Origin:*改为Access-Control-Allow-Origin:允许的域名,实际工作也要这么做2.Access-Control-Allow-Methods:GET,POST 规定允许的方法,建议控制严格些,不要随意放开DELETE之类的权限

    2.Access-Control-Allow-Credentials

    该字段可选。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送Cookie,删除该字段即可。

    最后,面试常考问题:

    CORS和JSONP的应用场景区别?

    CORS要求浏览器(>IE10)和服务器的同时支持,是跨域的根本解决方法,由浏览器自动完成。优点在于功能更加强大支持各种HTTP Method,缺点是兼容性不如JSONP。

  • 相关阅读:
    C# 对象与JSON串互相转换
    C#通过WebClient/HttpWebRequest实现http的post/get方法
    UserAccountInfo时间倒计时
    C# 计时器的三种使用方法
    iOS:quartz2D绘图小项目(涂鸦画板)
    iOS:quartz2D绘图 (动画)
    iOS:网页视图控件UIWebView的详解
    iOS:图像选取器控制器控件UIImagePickerController的详解
    iOS:quartz2D绘图(显示绘制在PDF上的图片)
    iOS:quartz2D绘图(在PDF文件上绘制图片)
  • 原文地址:https://www.cnblogs.com/yyzyou/p/12979208.html
Copyright © 2011-2022 走看看