Apache中配置支持CORS(跨域资源共享)实例

 更新时间:2015年01月20日 09:46:42   投稿:junjie  
这篇文章主要介绍了Apache中配置支持CORS(跨域资源共享)实例,本文给出了一个完整的apache、PHP、JavaScript结合实现的跨域资源共享实例,需要的朋友可以参考下

当使用ajax跨域请求时,浏览器报错:XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin.肯定是跨域的问题,如果用jsonp或者proxy的方式进行修改的话未免需要太大的工程量,所以采用CORS这种比较简单高效的技术。相比JOSP的方式,CORS更为高效。JSONP由于它的原理只能实现GET请求,而CORS支持所有类型的HTTP请求。使用CORS,可以使用普通的ajax实现跨域,这对于前端来说是极大的福音了,这个技术被现在大多数浏览器所普遍支持,因为跨域已经是普遍的要求,浏览器肯定会逐渐流出适当的‘后门'出来专门用以跨域。

浏览器支持情况

经本人测试IE浏览器中IE10及以上才可正常发送请求

1.服务器端对于CORS的支持,是通过设置Access-Control-Allow-Origin来进行的。如果浏览器检测到相应的设置,就可以允许Ajax进行跨域的访问,也就是相应的‘后门'。

设置Apache:Apache需要使用mod_headers模块来激活HTTP头的设置,它默认是激活的。你只需要修改Apache配置文件中的httpd.conf文件:

原始代码

复制代码 代码如下:

<Directory />
AllowOverride none
Require all denied
</Directory>

改为下面代码
复制代码 代码如下:

<Directory />
Require all denied
Header set Access-Control-Allow-Origin *
</Directory>

 

在处理请求的PHP文件中设置:

复制代码 代码如下:

<?php
    header("Access-Control-Allow-Origin:*");
    //处理请求输出数据

?>


配置的含义是允许任何域发起的请求都可以获取当前服务器的数据。当然,这样有很大的危险性,恶意站点可能通过XSS攻击我们的服务器。所以我们应该尽量有针对性的对限制安全的来源,例如下面的设置使得只有http://jb51.net/这个域才能跨域访问服务器的API。

httpd.conf中:

复制代码 代码如下:

Header set Access-Control-Allow-Origin https://www.jb51.net

php文件中:

复制代码 代码如下:

<?php
header("Access-Control-Allow-Origin:https://www.jb51.net");

前台代码:

复制代码 代码如下:

<script type="text/javascript">
function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
// 此时即支持CORS的情况
// 检查XMLHttpRequest对象是否有“withCredentials”属性
// “withCredentials”仅存在于XMLHTTPRequest level 2对象里
} else {
// 否则检查是否支持XDomainRequest
// XDomainRequest仅存在于IE中,是IE用于支持CORS请求的方式
xhr = new XDomainRequest();
}
xhr.open(method, url, true);
xhr.send();
xhr.onload = function(){
alert(xhr.responseText);
}
}
createCORSRequest('GET', "http://192.168.1.58/t.php");
</script>

相关文章

  • linux下安装配置svn独立服务器的步骤分享

    linux下安装配置svn独立服务器的步骤分享

    subversion(以下简称svn)是近年来崛起的版本管理工具,是cvs的接班人。 svn服务器有2种运行方式:独立服务器和借助apache。2种方式各有利弊
    2011-05-05
  • linux 下隐藏进程的一种方法及遇到的坑

    linux 下隐藏进程的一种方法及遇到的坑

    这篇文章主要介绍了linux 下隐藏进程的一种方法,主要实现思路就是利用 LD_PRELOAD 来实现系统函数的劫持,具体实现代码,需要的朋友可以参考下
    2018-09-09
  • linux系统下如何挂载NTFS移动硬盘

    linux系统下如何挂载NTFS移动硬盘

    用命令行挂载移动硬盘是Linux的基本操作之一,虽然目前有些Linux系统能自动加载移动硬盘,但有些时候(比如使用Ubuntu Server或其它Linux系统的时候)仍然需要手动操作,下面这篇文章主要介绍了linux系统下如何挂载NTFS移动硬盘,需要的朋友可以参考借鉴。
    2017-01-01
  • Linux下Mysql定时任务备份数据的实现方法

    Linux下Mysql定时任务备份数据的实现方法

    当安装完成操作系统之后,默认便会启动此任务调度命令。下面这篇文章主要给大家介绍了关于在Linux下Mysql定时任务备份数据的实现方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-11-11
  • CentOS中环境变量与配置文件的深入讲解

    CentOS中环境变量与配置文件的深入讲解

    这篇文章主要给大家介绍了关于CentOS中环境变量与配置文件的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用CentOS具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • Ubuntu 18.04上安装 phpMyAdmin的详细教程

    Ubuntu 18.04上安装 phpMyAdmin的详细教程

    这篇文章主要介绍了Ubuntu 18.04上安装 phpMyAdmin的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 解决生产环境遇到的curl和yum命令报错问题

    解决生产环境遇到的curl和yum命令报错问题

    在银河麒麟V10SP2arm64系统下,升级sshd服务同时升级了openssl至1.1.1l版本,导致curl和yum命令报错,分析原因是openssl版本与libcurl.so.4文件不兼容,尝试修复无效后,通过重新编译安装curl解决问题,建议在升级openssl时谨慎
    2024-09-09
  • Ubuntu18.04系统安装、配置Redis及phpredis扩展操作详解

    Ubuntu18.04系统安装、配置Redis及phpredis扩展操作详解

    这篇文章主要介绍了Ubuntu18.04系统安装、配置Redis及phpredis扩展操作,结合实例形式分析了Ubuntu18.04系统安装、配置Redis及phpredis扩展的相关原理、步骤、配置命令与操作注意事项,需要的朋友可以参考下
    2020-03-03
  • CentOS8 yum/dnf 配置国内源的方法

    CentOS8 yum/dnf 配置国内源的方法

    这篇文章主要介绍了CentOS8 yum/dnf 配置国内源的方法,需要的朋友可以参考下
    2019-10-10
  • Centos 7.4中的远程访问控制的实现方法

    Centos 7.4中的远程访问控制的实现方法

    这篇文章主要介绍了Centos 7.4中的远程访问控制的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11

最新评论