JSONP_跨域

題目1: 什么是同源策略

  • 瀏覽器出于安全方面的考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明確授權的情況下,不能讀寫對方的資源。

  • 本域指

  • 同協議:如都是http或者https

  • 同域名:如都是http://jirengu.com/ahttp://jirengu.com/b

  • 同端口:如都是80端口

如:
http://jirengu.com/a/b.jshttp://jirengu.com/index.php (同源)
不同源的例子:
http://jirengu.com/main.jshttps://jirengu.com/a.php (協議不同)
http://jirengu.com/main.jshttp://bbs.jirengu.com/a.php (域名不同,域名必須完全相同才可以)
http://jiengu.com/main.jshttp://jirengu.com:8080/a.php (端口不同,第一個是80)

  • **需要注意的是: 對于當前頁面來說頁面存放的 JS 文件的域不重要,重要的是加載該 JS 頁面所在什么域 **

題目2: 什么是跨域?跨域有幾種實現形式

  • 什么是跨域
  • 允許不同域的接口進行交互
  • 實現形式
  • JSONP
    html中script標簽可以引入其他域下的js,比如引入線上的jquery庫。利用這個特性,可實現跨域訪問接口。需要后端支持
echo $cb . '&&' . $cb . '(' . json_encode($ret) . ')';

定義數據處理函數_fun
創建script標簽,src的地址執行后端接口,最后加個參數callback=_fun
服務端在收到請求后,解析參數,計算返還數據,輸出 fun(data) 字符串。
fun(data)會放到script標簽做為js執行。此時會調用fun函數,將data做為參數。

  • CORS
    CORS 全稱是跨域資源共享(Cross-Origin Resource Sharing),是一種 ajax 跨域請求資源的方式,支持現代瀏覽器,IE支持10以上。 實現方式很簡單,當你使用 XMLHttpRequest 發送請求時,瀏覽器發現該請求不符合同源策略,會給該請求加一個請求頭:Origin,后臺進行一系列處理,如果確定接受請求則在返回結果中加入一個響應頭:Access-Control-Allow-Origin; 瀏覽器判斷該相應頭中是否包含 Origin 的值,如果有則瀏覽器會處理響應,我們就可以拿到響應數據,如果不包含瀏覽器直接駁回,這時我們無法拿到響應數據。所以 CORS 的表象是讓你覺得它與同源的 ajax 請求沒啥區別,代碼完全一樣。
  • 降域
  • postMessage

題目3: JSONP 的原理是什么

  • 后端將數據轉換成js代碼的格式
  • 前端通過script標簽接收來自后端的js代碼
  • 再與前端已有的js代碼一起運行實現跨域獲取數據

題目4: CORS是什么

CORS 全稱是跨域資源共享(Cross-Origin Resource Sharing),是一種 ajax 跨域請求資源的方式,支持現代瀏覽器,IE支持10以上。 實現方式很簡單,當你使用 XMLHttpRequest 發送請求時,瀏覽器發現該請求不符合同源策略,會給該請求加一個請求頭:Origin,后臺進行一系列處理,如果確定接受請求則在返回結果中加入一個響應頭:Access-Control-Allow-Origin; 瀏覽器判斷該相應頭中是否包含 Origin 的值,如果有則瀏覽器會處理響應,我們就可以拿到響應數據,如果不包含瀏覽器直接駁回,這時我們無法拿到響應數據。所以 CORS 的表象是讓你覺得它與同源的 ajax 請求沒啥區別,代碼完全一樣。

題目5: 根據視頻里的講解演示三種以上跨域的解決方式 ,寫成博客

postMessage()方法允許來自不同源的腳本采用異步方式進行有限的通信,可以實現跨文本檔、多窗口、跨域消息傳遞。

postMessage(data,origin)方法接受兩個參數

1.data:要傳遞的數據,html5規范中提到該參數可以是JavaScript的任意基本類型或可復制的對象,然而并不是所有瀏覽器都做到了這點兒,部分瀏覽器只能處理字符串參數,所以我們在傳遞參數的時候需要使用JSON.stringify()方法對對象參數序列化,在低版本IE中引用json2.js可以實現類似效果。

2.origin:字符串參數,指明目標窗口的源,協議+主機+端口號[+URL],URL會被忽略,所以可以不寫,這個參數是為了安全考慮,postMessage()方法只會將message傳遞給指定窗口,當然如果愿意也可以建參數設置為"*",這樣可以傳遞給任意窗口,如果要指定和當前窗口同源的話設置為"/"。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.什么是同源策略瀏覽器出于安全方面的考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明確授權的情況下,不...
    24_Magic閱讀 520評論 0 0
  • 什么是同源策略 同源政策(same-origin policy)是指同域名(或ip),同端口,同協議視為同一個域,...
    小囧兔閱讀 554評論 0 1
  • 什么是同源策略 同源策略/SOP(Same origin policy)是一種約定,由Netscape公司1995...
    YQY_苑閱讀 341評論 0 0
  • 什么是同源策略? 同源是瀏覽器出于安全方面的考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明確授權的情況...
    YM雨蒙閱讀 350評論 1 4
  • 題目1: 什么是同源策略 瀏覽器出于安全考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明確授權的情況下,...
    saintkl閱讀 241評論 0 0