为什么CORS基于目标服务器?为什么我必须使用JSONP?

时间:2012-09-28 14:19:15

标签: jsonp cors

如果可能的话,我想在答案中找到一个具体的例子。

为了解释,我们在这里有三名球员。

  • 我的服务器(myserver.com)
  • 客户端服务器(myclient.com)
  • 客户用户(通过myclient.com访问数据)

我正在为我的客户提供一个Web服务,允许他们以JSON格式检索他们的数据。为了使他们的网站能够工作,他们必须使用标准的XOR解决方法 - 要么是服务器端请求还是依赖我设置

Access-Control-Allow-Origin: http://myclient.com

这里有两个问题。首先,为什么在myserver.com上设置了原始政策?为什么我的服务器关心它所服务的内容最多?不应该是myclient.com设置这个吗?这里的具体例子很棒。

第二部分,我理解JSONP可以解决这个问题,但我担心使用它,因为我不理解第一部分的安全隐患。如果我可以设置Access-Control-Allow-Origin: *

,那么JSONP有什么意义呢?

1 个答案:

答案 0 :(得分:3)

很多问题!

  1. 如果您打算提供特定于用户的内容,JSONP肯定是危险的。如果服务器所服务的内容是完全公开的,并且(可能)是只读的,那么JSONP是明智的选择。不要将它用于任何假定为“登录状态”或身份验证/授权的内容。

  2. CORS绝对比JSONP好很多,但并不是每个(较旧的)浏览器都支持它。如果您想尽可能多地支持,您将需要某种后备。 CORS允许您执行GET以外的请求,这极大地提高了灵活性。

  3. 目标服务器需要允许这个的原因,主要是因为在域A上运行的javascript,不应该能够访问域B.如果域A可以“允许”这个,它意味着你可以创建javascript应用程序可以访问任何公共服务器的沙箱。只有域B的所有者才能明确允许域A的所有者访问其内容。

  4. 您的论点(为什么B域关心谁访问他们的资源)通常是有效的。但这不是为了保护域B,而是为了保护最终用户。未经明确许可,不允许域A代表最终用户向域B执行请求。

  5. 只是为了确定:除非你很好地理解JSONP的安全含义,否则CORS可能是一个更安全的选择。