為什么瀏覽器不能跨域


【reference:https://www.cnblogs.com/alvinwei1024/p/4626054.html

現在很多人特別是前端開發人員,在ajax請求,XMLHttpRequest的過程中會碰到一個問題,那就是跨域請求:

當我們javaScript腳本試圖跨域訪問時,瀏覽器會告訴你類似於No 'Access-Control-Allow-Origin' header is present on the requested resource.的消息。

可是我有時候又有跨域請求的強烈需求,比如需要去別的網站抓取一些數據(當然現在有很多方法來支持跨域,但這不是本文要講的內容)。原來這是瀏覽器的一個策略----“同源策略”

1. 什么是同源策略(Same Origin Policy)?

所謂同源策略,它是瀏覽器的一種最核心最基本的安全策略。它對來自不同源的文檔或這腳本對當前文檔的讀寫操作做了限制。

為什么要有這個策略,想必你已經知道,那就是因為保證用戶的信息安全。

2. 假如沒有同源策略

假設現在有a.com和b.com兩個域,如果沒有這一安全策略,那么當用戶在訪問a.com時,a.com的一段腳本就可以在不加載b.com的頁面而隨意修改或者獲取b.com上面的內容。這樣將會導致b.com頁面的頁面發生混亂,甚至信息被獲取,包括服務器端發來的session。這樣的話,我們的web世界將是一片混亂。也是因為瀏覽器的同源策略,保證來至不同源的對象不會互相干擾,保證了我們訪問頁面最基本的安全。

3. 什么是跨域?

只有同一域名或者,同一域名不同文件夾下是允許跨域的,其他的情況都是不允許跨域。

訪問同源的資源是被瀏覽器允許的,但是如果訪問不同源的資源,瀏覽器默認是不允許的。訪問不同源的資源那就是我們所說的跨域

從表中可以看出域名,子域名,端口號,協議不同都屬於不同源,當腳本被認為是來至不同源時,均被瀏覽器拒絕請求。

4. src可以跨域

在這里需要注意的是,文檔中的所有帶“src”屬性的標簽都可以跨域加載資源,而不受同源策略的限制。

如<script>、<img>、<iframe>、<link>等。如果你在頁面定義了這些標簽,在頁面加載事都對不同源的資源發起了一次GET請求。但是通過src加載的資源,瀏覽器限制了腳本對其返回的內容無法讀寫。特別是在ajax請求的時候,特別要注意XMLHttpRequest的時候是無法跨域訪問的。

5. 注意

當我們b.com在頁面加載不同源的資源時 <script src='a.com/a.js'></script> ,對於頁面來說,a.js是運行在b.com上的,因此對於當前頁面來說,a.js的源(Origin)是b.com而不是a.com。

因此頁面內存放的資源的域a.com並不重要,重要的是加載資源的頁面所在的域b.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM