關於ajax跨域的一些解決方案
阿新 • • 發佈:2018-01-04
dst control 關於 請求 method request 進行 前端 請求方式
1、JSONP方式解決跨域問題
jsonp解決跨域問題是一個比較古老的方案(實際中不推薦使用),當然,在實際項目中如果要使用JSONP,一般會使用JQ等對JSONP進行了封裝的類庫來進行ajax請求
實現原理:
JSONP之所以能夠用來解決跨域方案,主要是因為 <script>
腳本擁有跨域能力,而JSONP正是利用這一點來實現。
註意:
基於JSONP的實現原理,所以JSONP只能是“GET”請求,不能進行較為復雜的POST和其它請求,所以遇到那種情況,就得參考下面的CORS解決跨域了(所以如今它也基本被淘汰了)
2、CORS解決跨域問題
在Node.js後臺配置(express框架)
Node.js的後臺也相對來說比較簡單就可以進行配置。只需用express如下配置:
app.all(‘*‘, function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); res.header("X-Powered-By", ‘ 3.2.1‘) //這段僅僅為了方便返回json而已 res.header("Content-Type", "application/json;charset=utf-8"); if(req.method == ‘OPTIONS‘) { //讓options請求快速返回 res.sendStatus(200); } else { next(); } });
3、代理請求方式解決接口跨域問題
註意,由於接口代理是有代價的,所以這個僅是開發過程中進行的。
與前面的方法不同,前面CORS是後端解決,而這個主要是前端對接口進行代理,也就是:
-
前端ajax請求的是本地接口
-
本地接口接收到請求後向實際的接口請求數據,然後再將信息返回給前端
-
一般用node.js即可代理
關於如何實現代理,這裏就不重點描述了,方法和多,也不難,基本都是基於node.js的。
關於ajax跨域的一些解決方案