2

任何人都可以从 asp.net MVC 的角度帮助我理解 JSON、JSONP 和 CORS 之间的区别吗?

4

2 回答 2

13

JSON 是一种数据格式,而 JSON-P 和 CORS 是用于对数据进行跨域请求的机制/协议。

JSON是一种表示数据的格式。它最初是在 JavaScript 中定义的,但已经发展成为 API 表示数据的事实上的方式。大多数语言都有解析 JSON 的库。您可以在此处了解有关此格式的更多信息:http: //json.org/。这是一个示例 JSON 对象:

{
  "key": "value"
}

JSON-P是一种在 JavaScript 中加载数据的机制。它绕过浏览器的同源策略以从另一个域加载数据。它通过script在页面上嵌入 JavaScript 来做到这一点。此脚本调用远程域,该域返回包装在 JavaScript 函数中的数据。当这个函数返回浏览器时,它被执行,允许调用代码访问数据。

请注意,虽然名称中有“JSON”一词,但 JSON-P 不一定必须与 JSON 一起使用。例如,它可以将字符串或任何其他有效的 JavaScript 数据类型返回给用户。

请注意,虽然 JSON-P 在每个浏览器中都可以使用,但绕过浏览器的同源策略是一种技巧,并且有一些限制。例如,它只能发出 GET 请求,而调用者无权访问响应标头。由于它是浏览器和 JavaScript 自定义的,JSON-P 并不适合从其他语言访问数据,例如服务器端 Python。

您可以在此处了解有关 JSON-P 的更多信息:http ://en.wikipedia.org/wiki/JSONP

CORS是一种用于发出跨域请求的标准化机制。大多数现代浏览器都支持它。客户端使用标准 XmlHttpRequest 对象发出 CORS 请求。服务器收到请求后,决定是否允许跨域请求。如果允许,服务器会发出允许将响应传递给客户端的特殊标头。

您可以在此处找到 CORS 规范:http: //www.w3.org/TR/cors/ 您可以在此处了解有关如何使用 CORS 的更多信息:http: //www.html5rocks.com/en/tutorials/cors/

所有这些技术都独立于 ASP.NET MVC。如果您想使用这些技术,您应该首先问自己“我需要跨域访问数据吗?” 如果答案是“是”,那么您应该问“我需要支持哪些浏览器/平台?” 如果您的答案是“最现代的浏览器”,那么您应该考虑实施 CORS。否则你应该使用 JSON-P

于 2013-02-28T18:12:35.817 回答
3

CORS 是一种规范,它与 JSONP 无关,只是在较新的浏览器中使其过时。它使用普通的 XMLHttpRequest 调用启用跨域请求。

以下是它如何工作以及如何使用它的概述。它可以在 Firefox 3.5+、Safari 4+、Chrome 3+、Internet Explorer 8+ 以及使用相同引擎之一的任何其他设备中使用。

有关详细信息,请继续阅读

http://json-p.org/

于 2013-02-28T13:21:51.753 回答