我想从像Cloudflare这样的CDN提供我的JavaScript脚本。
现在我的脚本通过ajax与我的app服务器通信。当我从CDN加载这些脚本时,相同来源的策略限制不会发挥作用吗?
假设我的应用程序位于域中:
http://app.com
我从
加载我的脚本http://cdn.com/xyz/all.js
现在,由于我的脚本是从与我的应用运行的域不同的域加载的,因此我猜相同的源策略会阻止我与我的应用进行Ajax通信。
我出错了吗?
答案 0 :(得分:20)
不,它会奏效。这就是JSONP的工作原理。 脚本的“来源”是执行的页面,而不是来自的位置。
正如你所要求的,这是一个参考(我找不到更好的,但Crockford是众所周知的)
令人惊讶的是,src属性不受同源策略的约束。这意味着可以创建一个脚本元素,可以转到任何服务器,获取脚本并执行它。如果脚本导致JSON编码数据的传递,那么这是一个非常有用的东西。不幸的是,没有办法限制脚本或在执行之前检查脚本。它与页面中的脚本具有相同的权限。因此脚本可以访问和使用其cookie。它可以使用用户的授权访问原始服务器。它可以检查DOM和JavaScript全局对象,并发送它在世界任何地方找到的任何信息。 Script Tag Hack不安全,应该避免。
http://javascript.crockford.com/script.html
不是真正的参考:如果这不起作用,没有人可以从谷歌的CDN中包含jQuery,然后使用它的$.ajax
方法。