關於跨域和同源策略的一點總結

這幾天在chrome跑項目的時候遇到了一點問題,以下:css

 

接着經過這個錯誤,引伸出了在此次的問題中所要學習的東西:
    1.什麼是跨域,什麼狀況下才會產生跨域呢?
    2.針對跨域有什麼樣子的解決辦法?
    3.同源策略指的是?
    4.針對此次問題是如何產生的?
 
 
針對以上的問題,經過結合網上的資料,完成了下面的答案:
 
1.什麼是跨域,什麼狀況下才會產生跨域呢?
    跨域指的是不一樣域名之間相互訪問。例如個人電腦上有兩個服務器192.168.0.11和192.168.0.12,若是第一個服務器上的頁面要訪問第二個服務器
就叫作跨域,或者http://www.baidu.com  要訪問http://www.xxx.com 也是不一樣的域名,這種也叫跨域,因此不管是協議不一樣,端口不通,仍是域名不一樣都會產生跨域。
    在java開發項目中,咱們講的跨域通常指的是js中的ajax請求跨域。
 
2.針對跨域如何解決
    1.利用jsonp,ajax請求,dataType爲jsonp。首先須要理解,什麼事jsonp,與json不一樣,json是一種數據封裝格式,而jsonp應該理解爲一種數據的傳輸模式,就是經過jsonp咱們能夠從一個域的頁面上去取得另外一個域頁面上的元素。這種形式須要請求在服務端調整爲返回callback([json-object])的形式。
    2.經過修改document.domain來跨子域。瀏覽器都有一個同源策略,其限制之一就是第一種方法中咱們說的不能經過ajax的方法去請求不一樣源中的文檔。它的第二個限制是瀏覽器中不一樣域的框架之間是不能進行js的交互操做的。有一點是,不一樣的框架之間是能夠直接獲取到window對象的,可是沒法獲取到屬性和方法。咱們就能夠經過document.domain的將互相交互的兩個頁面都設置成相同的域名。
 
3.同源策略  
    同源策略指的是瀏覽器的一種規則,他是保障瀏覽器能夠安全運行的功能,只有經過了檢查,才容許被執行,因此回到此次項目上的緣由,同源策略禁止了某個文件的訪問,但是是該文件在跨域的時候因爲違反了同源策略的規則而致使的禁止。
 
4.針對於此次的問題,經過chrome的抓包軟件發如今訪問assests的時候被禁止了,後面發現是配置文件拼寫錯誤致使的,因而關於此次的問題總結出:
    IRIS Workflow System點擊這個draw button向connectivity發送請求,這個請求原本是被cas忽視的,因爲web.xml配置文件的文件名寫錯了,致使請求要通過cas,變成跨域請求,結果被駁回,就產生同源策略禁止的問題。
 
因此如下是對此次項目中遇到問題的總結:
關於在IRIS經過draw button打開text mode,在chrome瀏覽器中會出現error這個問題,錯誤緣由是:
在web.xml CAS bypass配置中,assets 寫成了assests,致使assets 中的文件在訪問的時候會被CAS 攔截,而後被攔截的文件就會進行跳轉,出現跳轉到 CAS server 的跨域請求,而chrome 對於跨域訪問,是拒絕訪問的,瀏覽器控制檯就會出現error。

過程是這樣的:
1. IRIS 經過 draw button 向Connectivity 發送請求,Connectivity 返回text mode 的地址。
2. IRIS 在 iframe 打開對應的text mode頁面,加載頁面須要的js/css等文件,通過CAS 的時候發現assets 這個文件夾裏面的文件沒有設置成 CAS bypass。
3. CAS 就開始對這些文件進行攔截,跳轉到 https://cas.noss.pccw.com:8181/… 檢查有沒有登陸過的ticket。 4. 在iframe指向的地址中,二級域名、端口、協議必須與主頁面徹底相同,不然就算跨域。這裏的協議就和IRIS 不同了,因此這個請求是一個跨域請求. 5. 在chrome中,對於跨域訪問,只直接拒絕訪問的,而後會在瀏覽器控制檯出現error。 解決方法: 把web.xml 中的assests 改回 assets。
相關文章
相關標籤/搜索