1. 程式人生 > >跨域請求資源的幾種方式

跨域請求資源的幾種方式

get 合同 是否 超時 表單提交 沒有 容易 系列 htm

跨域請求資源的幾種方式 由於瀏覽器同源策略,凡是發送請求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掉。

跨域請求資源的幾種方式