跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對javascript施加的安全限制。所謂同源是指,域名,協(xié)議,端口相同。瀏覽器執(zhí)行javascript腳本時(shí),會檢查這個(gè)腳本屬于那個(gè)頁面,如果不是同源頁面,就不會被執(zhí)行。同源策略的目的,是防止黑客做一些做奸犯科的勾當(dāng)。比如說,如果一個(gè)銀行的一個(gè)應(yīng)用允許用戶上傳網(wǎng)頁,如果沒有同源策略,黑客可以編寫一個(gè)登陸表單提交到自己的服務(wù)器上,得到一個(gè)看上去相當(dāng)高大上的頁面。黑客把這個(gè)頁面通過郵件等發(fā)給用戶,用戶誤認(rèn)為這是某銀行的主網(wǎng)頁進(jìn)行登陸,就會泄露自己的用戶數(shù)據(jù)。而因?yàn)闉g覽器的同源策略,黑客無法收到表單數(shù)據(jù)。
我們在開發(fā)的過程很容易遇到跨域的問題,下面用nginx 配置解決nginx 多域名跨域的問題
當(dāng)瀏覽器發(fā)起Ajax請求到其他域名時(shí),會出現(xiàn)跨域的問題,在nginx上的解決方案是配置Access-Control-Allow-Origin來解決,但是當(dāng)我們需要允許多個(gè)域名跨域訪問時(shí)卻不好配置,可以用map來實(shí)現(xiàn)
map $http_origin $other_domain {
default 0; "~http://1.nbwiki.com" http://1.nbwiki.com; "~http://2.nbwiki.com" http://2.nbwiki.com; "~http://3.nbwiki.com http://3.nbwiki.com;
}
server
{
listen 80;
server_name www.nbwiki.com;
root /nginx;
location /
{
concat on;
concat_max_files 20;
add_header Cache-Control "public, max-age=3600";
}
location ~* \.(ttf|ttc|otf|eot|woff|font.css)$ {
add_header Access-Control-Allow-Origin $other_domain;
}
}
上面講的是如何實(shí)現(xiàn)多個(gè)域名跨域,如果需要允許所有域名跨域的看直接寫 * 星號就好了
add_header Access-Control-Allow-Origin *;