Javascript 如果JSONP可以轻松地处理跨域约束,那么浏览器为什么还要麻烦呢?

Javascript 如果JSONP可以轻松地处理跨域约束,那么浏览器为什么还要麻烦呢?,javascript,browser,same-origin-policy,Javascript,Browser,Same Origin Policy,如果JSONP可以轻松地解决跨域约束(同源策略),那么浏览器为什么还要麻烦呢? 我绞尽脑汁是有原因的,但我想到的只是它实际上更糟糕,并提供了一种安全的错觉。JSONP不能解决跨域约束。一点也不 忘记JSONP这个术语吧。它只是一个元素,通常但不一定要动态插入DOM。不多不少 始终可以从任何域加载元素。对元素没有跨域限制 这就是JSONP的全部内容。这只是使用元素的惯例。它与任何其他跨域约束都没有任何关系,因为它不使用受这些约束约束约束的机制 请注意,您不能仅仅决定使用JSONP跨域访问JSON资

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

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

忘记JSONP这个术语吧。它只是一个
元素,通常但不一定要动态插入DOM。不多不少

始终可以从任何域加载
元素。对
元素没有跨域限制

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


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

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

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

  • 服务器信任客户机并支持JSONP(CORS)
  • 客户端相信服务器返回的脚本不会破坏页面上的javascript。因为为了使用JSONP,客户端加载脚本并使用script tag=>执行它非常危险
当您实现代码时,通常这两个域都在您的控制之下,这样做没有坏处。在其他情况下,例如
yourdomain.com
evil.com
互不信任=>浏览器会阻止跨域请求以确保安全性

JSONP可以轻松地处理跨域约束


不,您不能总是使用JSONP。JSONP只有在浏览器和服务器之间存在信任的情况下才能工作。

好吧,它在GET范围内围绕相同的源策略限制工作,但由于您不能使用JSONP发布,因此它的不安全范围有所不同。它确实与跨域访问共享相同的不安全性,甚至从服务器检索有效负载。浏览器为什么要麻烦呢?为什么无生命的编译代码会麻烦呢?说出你真正的意思,而不是这个。浏览器不选择任何东西,而是执行。除非有充分的理由,否则浏览器的开发人员通常不会删除功能。而且很难删除像从另一个域加载脚本这样的基本功能,这本质上就是JSONP。