跨域Cors服务器配置


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

当使用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 http://www.jb51.net


php文件中:

 

 

复制代码代码如下:

<?php
header("Access-Control-Allow-Origin:http://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 apache安装加载mod_headers模块

有服务器方面的问题无法解决?点击这里寻求帮助。

今天为模块安装缓存插件WP Super Cache,需要用到apache的mod_headers模块。下面介绍如何安装加载mod_headers模块。
1、进入httpd源码包下的目录modules/metadata。

  1. cd /lamp/httpd-2.2.20/modules/metadata

2、执行ls | grep mod_headers.命令,我们发现有
mod_headers.c
mod_headers.dep
mod_headers.dsp
mod_headers.exp
mod_headers.mak
这几个文件,我们需要的是mod_headers.c。
3、执行安装命令。

  1. /usr/local/apache/bin/apxs -i -a -c mod_headers.c

4、重启httpd服务

  1. service httpd restart

      下载apache(现在版本都是以这样的方式表达的:httpd-*.*.*.tar.gz),去apache.org官网:http://apache.org/dist/httpd/ 

       例如,下载的就是最新版本:httpd-2.2.9.tar.gz,放到你指定的目录/usr/local/里面。Let's begin

Java代码   收藏代码
  1. [root@local]# ls    // 你会看到你下载的httpd-2.2.9.tar.gz.  
  2. [root@local]# tar –zxvf  httpd-2.2.9.tar.gz // 解压后为httpd-2.2.9  
  3. [root@local]# mkdir /usr/local/web/apache/   //在这个目录下建立文档,利于管理        
  4. [root@local]# cd httpd-2.2.9  
  5. [root@httpd-2.2.9]#./configure  --prefix=/usr/local/web/apache    //安装路径  
  6.                         --enable-shared=max  --enable-module=rewirte  --enable-module=so       
  7. [root@httpd-2.2.9]# make  //编译  
  8. [root@httpd-2.2.9]# make install //安装  
  9. [root@httpd-2.2.9]# cd bin  
  10. [root@bin]# apachectl start            //开启httpd服务  

 注解:

Java代码   收藏代码
  1. ./configure //配置源代码树   
  2. --prefix=/usr/local/apache2 //体系无关文件的顶级安装目录PREFIX ,也就Apache的安装目录。   
  3. --enable-module=so //打开 so 模块,so 模块是用来提 DSO 支持的 apache 核心模块   
  4. --enable-mods-shared=all //编译全部的模板,对于不需要我们可以在httpd.conf去掉。   
  5. --enable-cache //支持缓存   
  6. --enable-file-cache //支持文件缓存   
  7. --enable-mem-cache //支持记忆缓存   
  8. --enable-disk-cache //支持磁盘缓存   
  9. --enable-static-support //支持静态连接(默认为动态连接)   
  10. --enable-static-htpasswd //使用静态连接编译 htpasswd - 管理用于基本认证的用户文件   
  11. --enable-static-htdigest //使用静态连接编译 htdigest - 管理用于摘要认证的用户文件   
  12. --enable-static-rotatelogs //使用静态连接编译 rotatelogs - 滚动 Apache 日志的管道日志程序   
  13. --enable-static-logresolve //使用静态连接编译 logresolve - 解析 Apache 日志中的IP地址为主机名   
  14. --enable-static-htdbm //使用静态连接编译 htdbm - 操作 DBM 密码数据库   
  15. --enable-static-ab //使用静态连接编译 ab - Apache HTTP 服务器性能测试工具   
  16. --enable-static-checkgid //使用静态连接编译 checkgid   
  17. --disable-cgid //禁止用一个外部 CGI 守护进程执行CGI脚本   
  18. --disable-cgi //禁止编译 CGI 版本的 PHP   
  19. --enable-ssl // 编译 ssl模块。   


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM