做web肯定會遇到跨域的問題渡蜻,關(guān)于跨域的概念不作過多描述,但需要了解的是跨域是前端的概念(雖然需要后端的配合计济,但由頭是前端)茸苇。
下文將一般跨域的處理方式做個記錄。
1.header()
在php代碼文件中設(shè)置:
<?php
header("Access-Control-Allow-Origin:*");
告訴瀏覽器沦寂,我這個數(shù)據(jù)是隨便誰都能進(jìn)行訪問的学密,不管是GET還是POST。
本方式表示:無論誰传藏、無論什么方式腻暮,都來吧槽地。
2.header()
第一種方式秃励,太隨便了相寇,覺得不安全瘟芝,可以使用本方法赦颇。
<?php
$URL="發(fā)起請求的頁面url地址";
header("Access-Control-Allow-Origin:".$URL);
那么就表示脯倚,我的數(shù)據(jù)纲酗,只有$URL表示的地址值脚猾,能進(jìn)行訪問請求霍狰,其他的 sorry get out please抡草。
我們還可以進(jìn)一步約束:
header("Access-Control-Allow-Method:POST/GET");
一起使用,代表本數(shù)據(jù)只能是特定URL特定請求方式才能正確得到相關(guān)結(jié)果蔗坯。 (還是注意康震,文檔里面要寫清楚)
3.JSONP
這個可能會使用得比較多一點,至少用起來爽一些宾濒。
因為瀏覽器同域規(guī)則的限制腿短,不能獲得其他不同域的數(shù)據(jù)。
但是绘梦,總有例外:
- <img src="">
- <script>
- <link>
- <iframe>
以上標(biāo)簽橘忱,不受瀏覽器同域規(guī)則限制。
jsonp原理卸奉,利用了<script>標(biāo)簽钝诚。
<script>
function func(data){
///your code
}
</script>
<script type="text/javascript" src="http://heyc.applinzi.com/mytest.php?callback=func"></script>
這是我本地localhost請求我在新浪sae云應(yīng)用的jsonp方式,我們看到代碼中榄棵,src指向的是一個php文件凝颇,這個是合法的潘拱,瀏覽器會將得到的內(nèi)容當(dāng)成是JS文件來進(jìn)行解釋和執(zhí)行。注意以上代碼的順序拧略。
那么作為被請求的服務(wù)端PHP代碼如下:
<?php
header("Content-type: ");
$option=$_REQUEST["func"];//保證post/get都可以
echo $option."({'name':'xxx'})";//輸出
以上就是實現(xiàn)jsonp的方式芦岂,第一句Header不是必須,因為是為了防止新浪輸出一些奇怪的東西才加的垫蛆。