【问题标题】:JSON Vs JSONP Vs CORSJSON 与 JSONP 与 CORS
【发布时间】:2013-02-14 16:57:58
【问题描述】:

谁能帮助我从 asp.net MVC 的角度理解 JSON、JSONP 和 CORS 之间的区别?

【问题讨论】:

    标签: asp.net-mvc json jsonp cors


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:

      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/

      【讨论】:

      • 是的,您应该并且不要忘记接受作为答案。问候
      猜你喜欢
      • 2015-12-14
      • 1970-01-01
      • 2013-11-18
      • 2011-06-08
      • 1970-01-01
      • 2011-03-14
      • 2014-08-27
      • 1970-01-01
      • 2013-07-29
      相关资源
      最近更新 更多