回答
这是一个相当宽泛的问题,可以保证维基本身。谷歌在这两方面也有相当一部分,但我想我可以打出几个关键点。
- 如果你需要一个只读的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