跨域:
瀏覽器從一個域名的網(wǎng)頁去請求另一個域名的資源時借跪,域名、端口缩举、協(xié)議任一不同匹颤,都是跨域
為什么會有跨域:
在前后端分離的模式下,前后端的域名是不一致的印蓖,此時就會發(fā)生跨域訪問問題。在請求的過程中我們要想回去數(shù)據(jù)一般都是post/get請求京腥,所以..跨域問題出現(xiàn)
跨域問題來源于JavaScript的同源策略,即只有 協(xié)議+主機名+端口號(如存在)相同公浪,則允許相互訪問他宛。也就是說JavaScript只能訪問和操作自己域下的資源欠气,不能訪問和操作其他域下的資源≡て猓跨域問題是針對JS和ajax的,html本身沒有跨域問題宜鸯,比如a標(biāo)簽憔古、script標(biāo)簽淋袖、甚至form標(biāo)簽(可以直接跨域發(fā)送數(shù)據(jù)并接收數(shù)據(jù))等
跨域的方案
CORS: 服務(wù)器設(shè)置允許,瀏覽器要能夠識別這個頭
JSONP:
瀏覽器script的src支持跨域訪問即碗,發(fā)了一個callback去服務(wù)器
服務(wù)器接受callback 返回了一個函數(shù)的調(diào)用攜帶了數(shù)據(jù)回來
瀏覽器接收到返回值當(dāng)做js解析焰情,執(zhí)行代碼
兼容性強
只能get拜姿,數(shù)據(jù)量小
sliverlight
websokcet
postmessage
iframe