跨域CORS问题简单完美解决

问题由来

get请求变成了options,post和delete请求也变成了opeions;原来这就是跨域的非简单请求:

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
非简单请求是那种对服务器有特殊要求的请求,比如请求方法是PUT或DELETE,或者Content-Type字段的类型是application/json。
非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。
浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。
只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。

参看:http://www.ruanyifeng.com/blog/2016/04/cors.html
所以,跨域问题的解决主要在服务器端,

服务端

最简单有效的配置是:

 $response->header('Access-Control-Allow-Origin', '*');
 $response->header('Access-Control-Allow-Methods', 'GET,POST,DELETE,PATCH,PUT,OPTIONS');//'*'
 $response->header('Access-Control-Allow-Headers', 'token');//头部运行自定义的字段
 $response->header('Access-Control-Max-Age', 7200);//2小时,减少预检

客户端:jQuery-Demo

新建一个ajax.html,放到本地(最好是服务器某个目录下),代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery-Ajax-CORS-Demo</title>
</head>
<body>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<!--Microsoft CDN-->
<!--http://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.js-->
<script>
    //http://api.jquery.com/jQuery.ajax/

    var url = "http://mini.lixiang80.com/v1/", token = "gwLTE1MDM2MzcwNTItMGM3ZWY2ZGFkMmMzNGYxNDk1ZmUwOTc1MGQ1MTM1YTc=bGl4aWFuZz";

    //list
    jQuery.ajax({
        method: "GET",
        url: url + "productAttrs/0",
        headers: {token: token}
    }).done(function (result) {
        console.log(result);
    });

    //store
    $.ajax({
        method: "POST",
        url: url + "productAttrs",
        data: {name: "产品属性", description: "描述"},
        headers: {token: token}
    }).done(function (result) {
        console.log(result);
    });

    //delete
    $.ajax({
        method: "DELETE",
        url: url + "productAttrs/465bc3a71db94a5cbb5f0726d63c4896",
        headers: {token: token}
    }).done(function (result) {
        console.log(result);
    });
</script>

</body>
</html>

如果还不明白,请看看权威的英文文档:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 由于浏览器的同源策略保护机制,浏览器不能执行来自其他来源的脚本。通过js在不同的域之间进行数据传输或通信,比如用a...
    威少_吴阅读 1,528评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,867评论 19 139
  • 跨域资源共享 CORS 对于web开发来讲,由于浏览器的同源策略,我们需要经常使用一些hack的方法去跨域获取资源...
    默默先生Alec阅读 680评论 0 0
  • 青山着秋裙,远看喜见春。 最爱春光里,小院压昆仑。 人在夕阳里,心在夕阳外, 待到夕阳落,仍向故乡迈。
    简村小吹阅读 371评论 28 40
  • 这些天,有忙着作假。这次是关于资源综合利用的,貌似政策对利用尾矿资源进行不菲的补贴,公司特意新上马两套破碎机和相关...
    刘北山阅读 396评论 1 2

友情链接更多精彩内容