最后但并非最不重要的,如果您使用的是jQuery 的 1.x版 强> 考虑一下 error 和 complete (或更好 fail 和 always )在某些常见情况下(例如网络错误),仍然没有为JSONP请求调用处理程序。当然有解决方法(超时设置,jQuery-JSONP插件),但我觉得CORS不那么烦人,特别是当跨域请求只来自移动设备(即混合应用程序)时,所以你不需要支持不幸的浏览器。
error
complete
fail
always
你很喜欢。如果您不必支持旧浏览器(6年前发布的浏览器),我肯定会使用CORS。
CORS更容易实现,因为如果你的API还不支持JSONP或CORS,那么添加一些静态头文件比修改响应体更容易。
使用CORS缓存请求也更容易。即使使用memcached内容,每个JSONP请求也需要是动态的。
JSONP仍然是一个脚本标记,因此无论它会导致某种程度的同步行为。 CORS不会。
JSONP只能是GET。和CORS一样,你可以使用任何方法。
我们的Web API无法在带有Windows身份验证的Safari(iOS 9.1)上运行。它正在使用Safari + iOS 8.4。当我们改为JSONP时,Safari又开始工作了。校验 这个链接 欲获得更多信息。
根据Spring Documentation,JSONP是一个hack而不是Cross Origin Resource Sharing的正确解决方案。因此,如果您不关心安全性,那么只需检查服务器上的域来源并添加Access-Control-Allow-Origin Response标头。