什么是CORS

CORS(Cross-Origin Resource Sharing 跨源资源共享),当一个请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。

===前端

  1. 不需要携带cookies,authorization,则前端无需配置
  2. 需要携带cookies,authorization,前端的XMLHttpRequest.withCredentials属性需要设置为true。
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/', true);
xhr.withCredentials = true;
xhr.send(null);

使用axios的话,其已经进行封装,可以直接设置withCredentials

axios.defaults.withCredentials = true;

===服务端

  1. 添加允许跨域请求的域名(Access-Control-Allow-Origin)

需要配置:1.允许跨域请求的域;2.允许携带的头部;3.允许携带cookies,authorization

$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';header("Access-Control-Allow-Headers: VERSION,token,If-Modified-Since,currentcity,currentprovince, Content-Type");header("Access-Control-Allow-Methods: HEAD,GET,POST,DELETE,PUT,OPTIONS");

$allow_origin = array(
    'https://localhost:8090'    // 本地调试跨域则需要本地请求地址
);
if (in_array($origin, $allow_origin)) {
    header('Access-Control-Allow-Origin:' . $origin);
    header('Access-Control-Allow-Credentials:true');
    header('Access-Control-Allow-Headers: Origin,Accept, Authorization, X-Request-With,VERSION,token,currentcity,currentprovince, Content-Type');

}

不添加,则前端会报错,所请求的资源的允许跨域请求的域没有当前的域名。

使用http协议,Access-Control-Allow-Origin可以设置为*,Access-Control-Allow-Headers也可以不设置; 使用https协议,Access-Control-Allow-Origin必须设置为特定的域名,Access-Control-Allow-Headers也必须设置为特定字段。

  1. 禁止OPTIONS请求
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    exit;
}

后端不禁止,会将options请求错误处理,发生找不到路由的情况。

使用CORS方式跨域的更多相关文章

  1. System.Web.Http.Cors配置跨域访问的两种方式

    System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...

  2. angularjs简单实现$http.post(CORS)跨域及$http.post传参方式模拟jQuery.post

    1.开启angularjs的CORS支持 .config(function($httpProvider) { // CORS post跨域配置 $httpProvider.defaults.useXD ...

  3. 配置CORS解决跨域调用—反思思考问题的方式

    导读:最近都在用一套完整的Java EE的体系做系统,之前都是用spring框架,现在弄这个Java EE,觉得新鲜又刺激.但,由于之前没有过多的研究和使用,在应用的过程中,也出现了不少的问题.累积了 ...

  4. HTML5安全:CORS(跨域资源共享)简介。。。ie67不要想了。。。

    来源:http://blog.csdn.net/hfahe/article/details/7730944 前言:像CORS对于现代前端这么重要的技术在国内基本上居然很少有人使用和提及,在百度或者Go ...

  5. Angular通过CORS实现跨域方案

    以前有一篇很老的文章网上转了很多,包括现在如果你百度"跨域"这个关键字,前几个推荐的都是"Javascript跨域总结与解决方案".看了一下感觉手段有点陈旧了, ...

  6. CORS(跨域资源共享)简介

    前言:像CORS对于现代前端这么重要的技术在国内基本上居然很少有人使用和提及,在百度或者Google上搜索CORS,搜到的中文文章基本都是另外一种卫星定位技术CORS的介绍,让我等前端同学情何以堪(对 ...

  7. 跨域解决方案一:使用CORS实现跨域

    跨站HTTP请求(Cross-site HTTP request)是指发起请求的资源所在域不同于请求指向的资源所在域的HTTP请求. 比如说,我在Web网站A(www.a.com)中通过<img ...

  8. HTML5安全:CORS(跨域资源共享)简介

    前言:像CORS对于现代前端这么重要的技术在国内基本上居然很少有人使用和提及,在百度或者Google上搜索CORS,搜到的中文文章基本都是另外一种卫星定位技术CORS的介绍,让我等前端同学情何以堪(对 ...

  9. 一步一步学习SignalR进行实时通信_3_通过CORS解决跨域

    原文:一步一步学习SignalR进行实时通信_3_通过CORS解决跨域 一步一步学习SignalR进行实时通信\_3_通过CORS解决跨域 SignalR 一步一步学习SignalR进行实时通信_3_ ...

随机推荐

  1. Tomcat第一个站点介绍

    背景 在讨论如何组织源码目录之前,很有必要对现有web站点的组织结构进行测试,特别是2.2版本的API,在服务器版本上是不同的,所以在2.2之后的版本中,所有的服务器版本都要求能够使用标准的压缩web ...

  2. 转:值得收藏!那些鲜为人知的 Mac OS X 技巧

    看到一篇网友整理的比较好的“那些鲜为人知的 Mac OS X 技巧”,转载过来分享给大家!希望能有帮助. 更多专题,可关注小编[磨人的小妖精],查看我的文章,也可上[风云社区 SCOEE],查找和下载 ...

  3. angular 中如果表单有相同的name一般会出现如下错误

    Unhandled Promise rejection Cannot assign to a reference or variable

  4. 原版js生成银行卡号

    function init() { undefined = "undefined"; mkCClist(); } function ccchk(cdi) { document.co ...

  5. Linux_问题

    1.远程连接项目服务器(miit_shi),遇到的问题 问题:Connecting to IP地址:22... Connection established. To escape to local s ...

  6. Rancher之HA部署

    sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors&q ...

  7. springboot单元测试 注入失败 空指针

    今天写代码,在test的类中@Autowired注入要测试的@Component类,但发现一运行就会报空指针异常java.lang.NullPointException,但发现使用new的方法的时候可 ...

  8. HTTP method constants

    HTTP method constants ngx.HTTP_GET ngx.HTTP_HEAD ngx.HTTP_PUT ngx.HTTP_POST ngx.HTTP_DELETE ngx.HTTP ...

  9. [译]在vuejs中使用任意js库

    原文 全局变量 最naive的办法是通过附加类库到window对象,使之成为全局变量: entry.js window._ = require('lodash'); MyComponent.vue e ...

  10. 本地测试使用Tomcat,生产环境使用GlassFish。

    总结:Tomcat8 = javaee7规范(servlet3.1 + jsp2.3 + el3.0 + websocket1.0) + java7 [配置初始化参数使用jdk8编译]conf/web ...