跨域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