JSON与JSONP对比CORS

时间:2013-02-28 13:19:33

标签: asp.net-mvc json jsonp cors

任何人都可以帮助我理解JSON,JSONP和JSON之间的差异吗? CORS,从asp.net MVC的角度来看?

2 个答案:

答案 0 :(得分:12)

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

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

{
  "key": "value"
}

JSON-P 是一种在JavaScript中加载数据的机制。它会绕过浏览器的same-origin policy,以便从其他域加载数据。它通过在页面上嵌入JavaScript script来实现。此脚本调用远程域,该域返回JavaScript函数中包含的数据。当此函数返回浏览器时,它将被执行,这允许调用代码访问数据。

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

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

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

CORS 是用于发出跨域请求的标准化机制。 most modern browsers支持此功能。客户端使用标准的XmlHttpRequest对象发出CORS请求。收到请求后,服务器决定是否允许跨域请求。如果允许,服务器会发出特殊标头,允许将响应传递给客户端。

您可以在此处找到CORS规范:http://www.w3.org/TR/cors/ 您可以在此处详细了解如何使用CORS:http://www.html5rocks.com/en/tutorials/cors/

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

答案 1 :(得分:3)

CORS是一个与JSONP无关的规范,除了在新的浏览器中过时之外。它使用普通的XMLHttpRequest调用启用跨域请求。

Here's an overview它是如何工作的以及如何使用它。它可以在Firefox 3.5 +,Safari 4 +,Chrome 3 +,Internet Explorer 8+和anything else using one of the same engines中使用。

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

  

http://json-p.org/