我觉得我遗漏了一些关于XSS预防的基本信息(无论是一般还是关于浏览器当前的实现)。
我在域A有一个使用jQuery的站点。在某些情况下,我希望它定期检索并格式化在域B托管的一些数据。
在域A页面的源代码中,似乎我可以很高兴地放入<script src="http://B/something.js"></script>
并且它将在当前页面的上下文中加载并执行脚本(特别是允许它读取和更新DOM)。我也可以使用jQuery.getScript
(内部通过AJAX内部提取和执行脚本)来做同样的事情。
但无论我是将其放入域A页还是域B上的JS,如果我尝试使用jQuery.ajax
加载http://B/data.json
,它会生成CORS违规错误:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
(请注意,在测试时,域A是本地file://
,这可能就是它在那里显示空原点的原因。实际上它将是一个“真正的”网站。)
我很难理解这种行为。我没有看到加载JSON数据的方式比加载任意脚本更安全 - 事实上相反的情况似乎更有可能。
大多数情况下,我问这个问题试图理解这可能是有意义的,但作为一个侧面问题,我有兴趣知道执行此类事情的“正确”方法(在域B上有一个脚本)尽管从域A)运行,但能够从其自己的域加载数据。如果绝对需要,我可以 将Allow-Origin标头添加到域B,但我不希望这样做。 (在域A上不可能这样做。)