跨域請求資源的幾種方式


跨域請求資源的幾種方式
由於瀏覽器同源策略,凡是發送請求URL的協議、域名、端口三者之間任意一與當前頁面地址不同即為跨域。
(1)JSONP(jsonp跨域get請求) 
     這種方式主要是通過動態創建一個script標簽,瀏覽器對script的資源引用沒有同源限制,同時資源加載到頁面后會立即執行;(創建script標簽向不同域提交http請求的不會被拒絕的方法,jsonp標簽的src屬性是沒有跨域限制的)
     實際項目中JSONP通常用來獲取json格式數據,這時前后端通常約定一個參數callback,該參數的值,就是處理返回數據的函數名稱;
缺點:這種方式無法發送post請求,另外要確定jsonp的請求是否失敗並不容易,大多數框架的實現都是結合超時時間來判斷。
 
(2)proxy 代理
這種方式首先將請求發送給后台服務器,通過服務器來發送請求,然后將請求的結果傳遞給前端;
需要注意的是如果你代理的是https協議的請求,那么你的proxy首先需要信任該證書或者忽略證書檢查,否則你的請求無法成功。
 
(3)cors
當你使用XMLHttpRequest發送請求時,瀏覽器發現該請求不符合同源策略,會給該請求頭origin,后台進行一系列處理,如果確定接受請求則在返回結果加入一個響應頭Access-Control-Allow-Origin;瀏覽器判斷該響應頭中是否包含Origin的值,如果有則瀏覽器會處理響應,我們就可以拿到響應數據,如果不包含瀏覽器直接駁回,這時我們無法拿到響應數據; 
 
post請求的content-type不是常規的三個:application/x-www-form-urlencoded(使用HTTP的post方式提交表單)、multipart/form-data(同上,但主要用於表單提交時伴隨文件上傳的場合)、text/plain(純文本)
 
post請求的payload為text/html 
payload指在http中,應該是post請求時所攜帶的有效數據;
 
有一種跨域需要特別注意就是https協議下發送https請求,除了使用proxy代理外其他方法都無解,會被瀏覽器直接block掉。


免責聲明!

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



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