Apache中配置支持CORS(跨域資源共享)實(shí)例
當(dāng)使用ajax跨域請(qǐng)求時(shí),瀏覽器報(bào)錯(cuò):XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin.肯定是跨域的問題,如果用jsonp或者proxy的方式進(jìn)行修改的話未免需要太大的工程量,所以采用CORS這種比較簡(jiǎn)單高效的技術(shù)。相比JOSP的方式,CORS更為高效。JSONP由于它的原理只能實(shí)現(xiàn)GET請(qǐng)求,而CORS支持所有類型的HTTP請(qǐng)求。使用CORS,可以使用普通的ajax實(shí)現(xiàn)跨域,這對(duì)于前端來說是極大的福音了,這個(gè)技術(shù)被現(xiàn)在大多數(shù)瀏覽器所普遍支持,因?yàn)榭缬蛞呀?jīng)是普遍的要求,瀏覽器肯定會(huì)逐漸流出適當(dāng)?shù)摹箝T'出來專門用以跨域。
瀏覽器支持情況
經(jīng)本人測(cè)試IE瀏覽器中IE10及以上才可正常發(fā)送請(qǐng)求
1.服務(wù)器端對(duì)于CORS的支持,是通過設(shè)置Access-Control-Allow-Origin來進(jìn)行的。如果瀏覽器檢測(cè)到相應(yīng)的設(shè)置,就可以允許Ajax進(jìn)行跨域的訪問,也就是相應(yīng)的‘后門'。
設(shè)置Apache:Apache需要使用mod_headers模塊來激活HTTP頭的設(shè)置,它默認(rèn)是激活的。你只需要修改Apache配置文件中的httpd.conf文件:
原始代碼
<Directory />
AllowOverride none
Require all denied
</Directory>
改為下面代碼
<Directory />
Require all denied
Header set Access-Control-Allow-Origin *
</Directory>
在處理請(qǐng)求的PHP文件中設(shè)置:
<?php
header("Access-Control-Allow-Origin:*");
//處理請(qǐng)求輸出數(shù)據(jù)
?>
配置的含義是允許任何域發(fā)起的請(qǐng)求都可以獲取當(dāng)前服務(wù)器的數(shù)據(jù)。當(dāng)然,這樣有很大的危險(xiǎn)性,惡意站點(diǎn)可能通過XSS攻擊我們的服務(wù)器。所以我們應(yīng)該盡量有針對(duì)性的對(duì)限制安全的來源,例如下面的設(shè)置使得只有http://jb51.net/這個(gè)域才能跨域訪問服務(wù)器的API。
httpd.conf中:
Header set Access-Control-Allow-Origin http://www.dbjr.com.cn
php文件中:
<?php
header("Access-Control-Allow-Origin:http://www.dbjr.com.cn");
前臺(tái)代碼:
<script type="text/javascript">
function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
// 此時(shí)即支持CORS的情況
// 檢查XMLHttpRequest對(duì)象是否有“withCredentials”屬性
// “withCredentials”僅存在于XMLHTTPRequest level 2對(duì)象里
} else {
// 否則檢查是否支持XDomainRequest
// XDomainRequest僅存在于IE中,是IE用于支持CORS請(qǐng)求的方式
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>
- JS跨域解決方案之使用CORS實(shí)現(xiàn)跨域
- js實(shí)現(xiàn)跨域的幾種方法匯總(圖片ping、JSONP和CORS)
- Node.js設(shè)置CORS跨域請(qǐng)求中多域名白名單的方法
- 淺談spring-boot 允許接口跨域并實(shí)現(xiàn)攔截(CORS)
- vue+springboot實(shí)現(xiàn)項(xiàng)目的CORS跨域請(qǐng)求
- 淺談Koa2框架利用CORS完成跨域ajax請(qǐng)求
- 跨域解決之JSONP和CORS的詳細(xì)介紹
- C# WebApi CORS跨域問題解決方案
- react中fetch之cors跨域請(qǐng)求的實(shí)現(xiàn)方法
- 跨域(CORS)問題的解決方案分享
相關(guān)文章
詳解CentOS的SVN服務(wù)器搭建與自動(dòng)部署全過程
最近因?yàn)楣ぷ餍枰艘粋€(gè)晚上時(shí)間折騰svn,網(wǎng)上的教程太亂太雜,還有很多是錯(cuò)誤的,終于搞定了,所以想著把過程記錄下來。這篇文章主要介紹了CentOS的SVN服務(wù)器搭建與自動(dòng)部署全過程,需要的朋友可以參考借鑒,下面來一起看看吧。2017-02-02Linux系統(tǒng)下SystemC環(huán)境配置方法
大家好,本篇文章主要講的是Linux系統(tǒng)下SystemC環(huán)境配置方法,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12對(duì)send(),recv()函數(shù)的全面理解
下面小編就為大家?guī)硪黄獙?duì)send(),recv()函數(shù)的全面理解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01Kloxo-MR VPS主機(jī)控制面板-安裝使用及中文設(shè)置方法
這篇文章主要介紹了Kloxo-MR VPS主機(jī)控制面板-安裝使用及中文設(shè)置方法,需要的朋友可以參考下2017-07-07sersync實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)同步的方法
下面小編就為大家分享一篇sersync實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)同步的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12