回答
這是一個相當寬泛的問題,可以保證維基本身。谷歌在這兩方面也有相當一部分,但我想我可以打出幾個關鍵點。
- 如果你需要一個只讀的Ajax界面到您的服務器,你需要支持IE < = 9,歌劇< 12,或Firefox < 3.5或其他各種舊的或隱晦的瀏覽器,CORS出來了,用JSONP 。 IE8和IE9 sorta支持CORS但有問題,請參閱下面第一條評論中的鏈接。另一方面,如果您的Web API是可讀/寫的(例如,完全REST或只是POST/GET)而不是隻讀(即GET),那麼JSONP就不存在了。使用CORS。 JSONP本質上是隻讀的。
如果這些都不是問題,我會隨便選擇最簡單或最熟悉的。如果它是一種投入,請嘗試CORS,因爲它是更「現代」的解決方案,而JSONP更像是一種破解,將數據轉化爲腳本以繞過跨域限制。然而,CORS通常需要更多的服務器端配置。
如果你使用jQuery,我不知道你在哪裏想出的想法,CORS是「更加友好客戶端和更容易實現。」見https://gist.github.com/3131951。 jQuery對JsonP的細節進行了抽象,而CORS實際上可能在你的服務器端實現有點棘手,這取決於你使用的是什麼技術。
我最近開發了一個web應用程序,使用jquery和backbone.js,它從我們控制的各種跨域Web服務讀取,最終使用Json-P而不是CORS,因爲我們需要支持IE7,它是在服務器端稍微簡單一點(我們運行Django w/DjangoRestFramework),並且與客戶端上的jquery幾乎相同。
你很漂亮。如果您不需要支持傳統瀏覽器(6年前發佈的瀏覽器),我一定會使用CORS。
CORS更容易實現,因爲如果你的API不支持JSONP或CORS,只需添加一些靜態頭文件比修改響應體更容易。
此外,使用CORS緩存請求更容易。即使使用memcached內容,每個JSONP請求也必須是動態的。
JSONP仍然是一個腳本標記,所以不管它會引起什麼級別的同步行爲。 CORS不會。
JSONP只能是GET。和CORS一樣,你可以使用任何方法。
我讚賞「同步行爲」信息。 –
最後但並非最不重要,如果您使用的是jQuery v1。x,認爲在一些常見情況下(例如,網絡錯誤),仍然沒有爲JSONP請求調用error
和complete
(或更好的fail
和always
)處理程序。當然有解決方法(超時設置,jQuery-JSONP插件),但我發現CORS不那麼煩人,特別是當跨域請求只來自移動設備(即混合應用程序)時,所以您不需要支持不幸的瀏覽器。
+1回調信息 – plainjimbo
根據Spring Documentation,JSONP是一種黑客攻擊,而非跨源資源共享的適當解決方案。因此,如果安全不是您的擔憂,那麼只需在您的服務器上檢查您的域名來源並添加Access-Control-Allow-Origin Response標題。
- 1. 什麼是T-SQL語法如果這或那麼那還有什麼不做?
- 2. mysql選擇這個還是那個?
- 3. RESTful JSON端點應以.js結尾嗎?那麼JSONP呢?
- 4. ASP:ScriptManager,那是什麼?
- 5. Hashtable是那麼快
- 6. HTML5,那麼這是什麼?
- 7. 。那麼是不是在devicesIsReady
- 8. .jar爲.cs類/文件轉換技術還是實用程序?
- 9. 那麼C#4.0代碼合同實際上是否還在做什麼?
- 10. 我應該使用兩個腳本還是一個?那麼`wordwrap()`怎麼樣?
- 11. 什麼是「[CS格式= A]」標頭?
- 12. 什麼是MyDataContext.dbml下的.cs文件?
- 13. CS和CSMap是什麼意思?
- 14. 什麼是Informatica等同於Microsoft的SQL Server Management Studio,還是那裏?
- 15. wsdlsoap:地址有http,而URL本身在https中;那麼,它是http還是https?
- 16. ScrollView FOCUS_DOWN,還沒有那個
- 17. JSONP使用 - 範圍還是異步問題?使用jQuery
- 18. 頭還是什麼?
- 19. 爲什麼YQL工作但不是JSONP?
- 20. JSONP文件的擴展名是什麼?
- 21. ValidateSilverlightFrameworkPaths任務?那是什麼?
- 22. %ud,%vud那些是什麼
- 23. /*! */ 那是什麼意思?
- 24. 那是什麼語言?
- 25. ? x:y,那是什麼意思?
- 26. 分開功能還是不分開功能?那就是
- 27. Php REST webservice:那些url是邏輯還是物理?
- 28. IIS7上的無限網站?那是localhost還是虛擬的?
- 29. 去foo吧,還是不去foo吧:那就是問題
- 30. Git恢復還原還是什麼?
如果您支持IE8和IE9,它也可以排除CORS,因爲Content-Type被強制爲「text/plain」,請參閱http://blogs.msdn.com/b/上的第(4)點。 ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitation-and-workarounds.aspx – jamiebarrow
有道理的夥伴 –
答案中的要點非常有幫助,謝謝! – MVCDS