回覆列表
  • 1 # 呦呦呦呦呦丶L

    1它只支援GET請求而不支援POST等其它型別的HTTP請求

    2它只支援跨域HTTP請求這種情況,不能解決不同域的兩個頁面之間如何進行JavaScript呼叫的問題。

    3 jsonp在呼叫失敗的時候不會返回各種HTTP狀態碼。

    4安全性不好保證。萬一提供jsonp的服務存在頁面注入漏洞,即它返回的javascript的內容被人控制的。那麼結果是什麼?所有呼叫這個 jsonp的網站都會存在漏洞。於是無法把危險控制在一個域名下…所以在使用jsonp的時候必須要保證使用的jsonp服務必須是安全可信的。

  • 2 # KKXIAO

    首先jsonp可擴充套件性不好,針對業務邏輯進行擴充套件應該有自己的統一api管理jsonp需要服務端配合你,你傳給服務端是自定義callback,服務端需要處理這些傳過來的回撥,而且不利於前後端分離可能造成安全問題(跨站指令碼攻擊)前端自己維護起來也費勁,而且對非同步網路io來講,使用巢狀回撥來控制非同步任務顯然是不明智的舉措

  • 3 # 程式設計師進軍SJF

    題主概念混淆了,axios和jsonp並不是解決同一問題的東西

    axios是一種ajax請求的封裝

    而jsonp是一種跨域ajax請求的解決方案

    所以說就算是你用axios一樣會有跨域問題,而遇到跨域的問題之後,你可以選擇使用jsonp/proxy代理的方式把這個跨域的問題解決掉。

    兩者本質上並不衝突

  • 4 # 程式猿小彭同學

    Axios是對http的ajax請求的封裝從而形成的一種框架。他可以實現跨域這一基本功能,他還能實現其他jsonp所不支援的功能。他指出get post put delete 等等http請求方式。所以說兩者並不衝突,各有千秋。

    1.axios利用了es6的promise特性將http的各種請求進行了封裝最後採用鏈式呼叫的方式來進行執行各個操作進行回撥等等

    2.jsonp可以用來解決跨域問題,同時解決跨域問題的解決方案不止這一個方案,所以說jsonp是一個工具而已,兩者並沒有什麼較大的衝突,工具之間也可以互用,沒有什麼較大影響。

  • 5 # 一顆蘿蔔啊

    一個場景

    你做為專案前端的負責人,需要定下前端的資料請求規範與框架,你早就對axios很不滿了,於是決定拉起袖子,直接用JSONP上。

    於是在團隊裡面,你直接喊,大家,後面我們請求資料統一使用JSONP,誰用axios誰明天就不用來了。

    然後,你和服務端的人員開了一個會,讓他們定下介面文件,一天後,你收到一份介面文件,裡面寫好了請求協議,除了GET還有POST,還有PUT和DELETE。

    你用了一個GET介面,請求完,發現很完美,服務端不用設定Access-Control-Allow,你突然覺得自己這個決定很完美,果然最初的決定是正確的,於是你就讓各個開發開始對接服務端介面。

    問題來了

    不一會兒,一位前端開發和你說,不行呀,JSONP只能進行Get請求,其它什麼POST都不支援呀,頓時你懵逼了……

    上面是個虛擬場景,裡面講了JSONP的一個問題,就是隻能使用GET請求獲取資料。我們來細說下什麼是JSONP。

    JSONP原理

    ajax的核心是透過XmlHttpRequest獲取連結的內容,它是可以支援任何請求方式的。但有個問題就是,如果服務端不支援,它是不可能取到跨域請求的資訊的。而JSONP呢?

    我們在寫網頁程式碼時,發現標籤的src屬性是可以載入其它跨的資訊的,比如Script、Img、iFrame的標籤,於是我們靈機一動,那是不是也可以來載入服務端介面呀。

    然後你試了下,哇靠,果然可以,只要輸出格式處理好,你甚至可以使用它來請求資料並進行處理。

    先天問題

    但是由於先天性的問題,JSONP只適合用來獲取資料,它沒法做其它請求處理。

    那你可能會說,那我就獲取使用JSONP可以了吧,其它使用AJAX。我們先不說,統一編碼對維護性的成本降低的重要性,你還分兩套實現方案,你如果實在要處理,我們試下看看效果如果。

    假如一切正常,你用JSONP請求資料,資料返回正常,你顯示,很完美。

    假如出了一點點問題,你用JSONP請求資料,資料沒返回,或是一些奇怪的錯誤,對,沒有錯誤碼,你都不知道是網路問題,還是程式碼問題,還是鑑權問題。對了,說到鑑權,JSONP你都沒法自定義Header,可製作性太低了。

    總結下JSONP請求能力單一JSONP在現在前端開發中影響編碼規範現在跨域處理很方便,處理都是微服務例外

    如果你實在需要一個外部介面,這個介面不是你開發的,且是不支援跨域的,那JSONP是最好的處理方式。

  • 6 # 萬能擼Sir

    axios也不能完全跨域,所謂jsonp只是利用了script標籤引入js可以跨域的特性,從而實現資料跨域請求,這也就說明了為什麼jsonp只支援get,因為script只有src屬性且只能是get請求。

    所謂的跨域是瀏覽器和後端一起驗證的,規定header相關屬性,當後端返回條件包含跨域的指定條件時才可以實現跨域請求,所以,其實真正管理跨域的部分在後端

  • 7 # 山羊AM

    你搞錯了axios也不是解決跨域問題的,axios也需要用代理才能實現跨域。用代理就相當於還是訪問本域下。

    jsonp為什麼不用,因為雖說jsonp可以解決跨域,但是他的體量太大,他就相當於重新生成了一個html,然後把域做成你要訪問的介面域下,雖說可能不準確,但是你可以這麼理解。完完全全是個新的請求。

    實際使用推薦axios,都封裝好了,用就行了,除錯時候在前端專案配置裡做代理,上線後到nginx裡做代理

  • 8 # 自然框架

    jsonp只是當初瀏覽器沒有正式支援跨越的情況下,的一種臨時的應對方式。

    當初瀏覽器不支援跨域,限制的非常嚴格。

    但是有時候又需要跨域請求,於是沒辦法,只好把json請求,偽裝成js請求。

    以此來繞過瀏覽器的限制。

    現在瀏覽器正式支援跨域請求了,cors的跨域請求方案才是正規途徑。

    另外對比方式也不對。

    jQuery的ajax和axios是同等的。

    jsonp和cors是類似功能的。

    jQuery的ajax也是可以使用cors的方式進行正規的跨域請求的。

    axios的跨域方式沒有研究,大概也是用cors的方式吧。

    所以你這個對比方式,本身就不對勁。

  • 中秋節和大豐收的關聯?
  • 計劃今年下半年買一輛10-15萬的SUV,有沒有懂車的給推薦一下?