新聞中心
對于前端開發(fā)來說跨域應(yīng)該是最不陌生的問題了,無論是開發(fā)過程中還是在面試過程中都是一個經(jīng)常遇到的一個問題,在開發(fā)過程中遇到這個問題的話一般都是找后端同學(xué)去解決,以至于很多人都忽略了對跨域的認(rèn)識。為什么會導(dǎo)致跨域?遇到跨域又怎么去解決呢?本文會對這些問題一一的介紹。

創(chuàng)新互聯(lián)從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、成都網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元麻山做網(wǎng)站,已為上家服務(wù),為麻山各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
在JavaScript中,在不同的域名下面進(jìn)行數(shù)據(jù)交互,就會遇到跨域問題,說到跨域首先要從同源說起,瀏覽器為了提供一種安全的運(yùn)行環(huán)境,各個瀏覽器廠商協(xié)定使用同源策略。
什么同源策略
同源策略:同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響??梢哉fWeb是構(gòu)建在同源策略基礎(chǔ)之上的,瀏覽器只是針對同源策略的一種實現(xiàn)。
同源策略是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到XSS、CSRF等攻擊。所謂同源是指協(xié)議+域名+端口三者相同,即便兩個不同的域名指向同一個ip地址,也非同源。
Url組成部分
了解同源策略以后,同樣需要對url的組成部分也順帶了解一下吧,只有了解url之后當(dāng)出現(xiàn)跨域的時候才知道哪里出了問題,這樣才能和后端、運(yùn)維開懟,懟天懟地對空氣。O(∩_∩)O哈哈~
從上圖中能夠清晰的看出url中每個部分的含義:
- protocol:協(xié)議常用的協(xié)議是http
- auth:驗證,因為明文傳輸用戶名和密碼,非HTTPS環(huán)境下很不安全,一般用的非常少
- hostname:主機(jī)地址,可以是域名,也可以是IP地址
- port:端口http協(xié)議默認(rèn)端口是:80端口,如果不寫默認(rèn)就是:80端口
- pathname:路徑網(wǎng)絡(luò)資源在服務(wù)器中的指定路徑
- serarch:查詢字符串如果需要從服務(wù)器那里查詢內(nèi)容,在這里編輯
- hash:哈希網(wǎng)頁中可能會分為不同的片段,如果想訪問網(wǎng)頁后直接到達(dá)指定位置,可以在這部分設(shè)置
項目過程過程中經(jīng)常會用到一些緩存,瀏覽器為了網(wǎng)頁的安全在緩存的時候,由于同源策略的問題對其緩存內(nèi)容進(jìn)行了限制,其實想想也是對的,如果不使用同源策略的話,很容易沖掉緩存的東西。
- Cookie、LocalStorage和IndexDB等無法讀取。
- DOM無法獲得。
- AJAX請求不能發(fā)送。
當(dāng)然瀏覽器也沒有把所有的東西都限制了,比如圖片、互聯(lián)網(wǎng)資源等還是允許跨域請求的。允許跨域請求都是使用標(biāo)簽,只有三個標(biāo)簽是允許跨域加載資源:
在項目開發(fā)過程中時不時的就會遇到下面這樣拋出了錯誤,有的人可能在開發(fā)過程中沒有遇到過,如果是的話,你可能遇到一個很不錯的后端或者運(yùn)維。
- XMLHttpRequest cannot loadhttp://www.******.com/. No 'Access-Control-Allow-Origin'
- header is present on the requested resource. Origin 'null' is therefore not allowed access.
上面的報錯就是典型的跨域報錯,既然跨域這么常見到底都有哪些情況會導(dǎo)致跨域的問題:
| 說明 | 是否允許通信 |
|---|---|
| 同一域名下 | 允許 |
| 同一域名下不同文件夾 | 允許 |
| 同一域名,不同端口 | 不允許 |
| 同一域名,不同協(xié)議 | 不允許 |
| 域名和域名對應(yīng)ip | 不允許 |
| 主域名相同,子域名不同 | 不允許 |
| 同一域名,不同二級域名 | 不允許 |
| 不同域名 | 不允許 |
跨域解決方案
由于瀏覽器的限制造成了很多的跨域問題,同樣也是為了安全,既然出現(xiàn)了跨域就必定要有一些對應(yīng)的解決方案,總不能遇到跨域之后項目就不做了啊,可能瞬間就涼了。閑話就不多扯了。
JSONP
在遇到跨域的時候經(jīng)常會提及到的一個詞就是JSONP,一直在說JSONP?可是通過什么原理來實現(xiàn)的呢?我覺得應(yīng)該了解一下到底什么再去了解一下實現(xiàn)固然原理也就懂得咯。
什么是JSONP
JSONP:JSON的一種“使用模式”,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問的問題。由于同源策略,一般來說位于server1.example.com的網(wǎng)頁無法與不是server1.example.com的服務(wù)器溝通,而HTML的


咨詢
建站咨詢