【发布时间】:2012-08-31 02:04:09
【问题描述】:
我的 WebAPI 部署在 Intranet 环境中。这意味着安全不是我关心的问题。
似乎 CORS 对客户端更加友好并且更容易实现。
还有其他我可能遗漏的问题吗?
【问题讨论】:
标签: jsonp cors asp.net-web-api
我的 WebAPI 部署在 Intranet 环境中。这意味着安全不是我关心的问题。
似乎 CORS 对客户端更加友好并且更容易实现。
还有其他我可能遗漏的问题吗?
【问题讨论】:
标签: jsonp cors asp.net-web-api
根据 Spring 文档,JSONP 是一种 hack,而不是跨域资源共享的正确解决方案。因此,如果您不关心安全性,那么只需检查您服务器上的域来源并添加 Access-Control-Allow-Origin 响应标头。
【讨论】:
我们的 Web API 无法在带有 Windows 身份验证的 Safari (iOS 9.1) 上运行。它适用于 Safari + iOS 8.4。当我们更改为 JSONP 时,Safari 又开始工作了。更多信息请查看this link。
【讨论】:
这是一个相当广泛的问题,并且可以保证一个 wiki 本身。 google 上也有很多关于这两者的信息,但我认为我可以达到几个关键点。
如果这些都不是问题,我会选择最简单或最熟悉的方法。如果它是一个折腾,请尝试 CORS,因为它是更“现代”的解决方案,而 JSONP 更像是一种 hack,将数据转换为脚本以绕过跨域限制。然而,CORS 通常需要更多的服务器端配置。
如果您使用的是 jQuery,我不确定您从哪里想到 CORS“对客户端更友好并且更容易实现强>。”见https://gist.github.com/3131951。 jQuery 抽象了 JsonP 的细节,根据您使用的技术,在服务器端实现 CORS 实际上可能有些棘手。
我最近开发了一个 web 应用程序,使用 jquery 和backbone.js,它从我们控制的各种跨域 web 服务中读取,最终使用 Json-P 而不是 CORS,因为我们需要支持 IE7,它是一个在服务器端稍微简单一点(我们运行带有 DjangoRestFramework 的 Django),在客户端与 jquery 几乎相同。
【讨论】:
最后但同样重要的是,如果您使用的是 jQuery v1.x,请考虑仍然不调用 error 和 complete(或更好的 fail 和 always)处理程序用于一些常见情况下的 JSONP 请求(例如网络错误)。当然有解决方法(超时设置,jQuery-JSONP 插件),但我发现 CORS 不那么烦人,特别是当跨域请求仅来自移动设备(即混合应用程序)时,因此您不需要支持不幸的浏览器。
【讨论】:
你很准。如果您不必支持旧版浏览器(6 年前发布的浏览器),我肯定会选择 CORS。
CORS 更容易实现,因为如果您的 API 尚不支持 JSONP 或 CORS,则添加一些静态标头比修改响应正文更容易。
此外,使用 CORS 缓存请求更容易。每个 JSONP 请求都需要是动态的,即使是 memcached 内容。
JSONP 仍然是一个脚本标签,所以不管它是什么都会引起某种程度的同步行为。 CORS 不会。
JSONP 只能是 GET。与 CORS 一样,您可以使用任何方法。
【讨论】: