0

如果 JSONP 可以轻松解决跨域约束(同源策略),为什么浏览器还要麻烦呢?我绞尽脑汁是有原因的,但我想出的只是它实际上更糟,并提供了一种安全的错觉。

4

2 回答 2

1

原因很简单,它基于TRUST。如果没有信任,就不能做 JSONP。例如:如果域abc.com不信任def.comabc.com则不支持 JSONP 并且def.com无法使用 JSONP(或 CORS)。

服务器和客户端都必须相互信任才能使 JSONP 工作(包括 CORS)

  • 服务器信任客户端并支持 JSONP (CORS)
  • 客户端信任从服务器返回的脚本不会破坏页面上的 javascript的服务器。因为为了使用 JSONP,客户端加载脚本并使用 script 标签执行它 => 非常危险。

当您实现代码时,通常两个域都在您的控制之下,这样做并没有什么坏处。在其他情况下,例如yourdomain.com彼此evil.com不信任 => 浏览器阻止跨域请求以确保安全。

JSONP 可以轻松解决跨域约束

不,您不能总是使用 JSONP。JSONP 仅在浏览器和服务器之间存在信任时才有效。

于 2013-09-06T07:35:22.377 回答
-1

JSONP不能解决跨域约束。一点也不。

忘记术语 JSONP。它只是一个<script>元素,通常但不一定动态插入到 DOM 中。不多也不少。

总是可以从任何域加载<script>元素。<script>元素没有跨域限制。

这就是 JSONP 的全部内容。这只是使用<script>元素的约定。它与任何其他跨域约束都没有任何关系,因为它不使用受这些约束的机制。

请注意,您不能只决定使用 JSONP 跨域访问 JSON 资源。如果资源是纯 JSON,除非它在同一个域中或允许通过 CORS 访问,否则您将无法读取它。您无法从浏览器中更改此设置。服务器必须以可执行脚本的形式提供资源,即 JSONP。

于 2013-09-06T06:13:50.277 回答