问题标签 [same-origin-policy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1466 浏览

javascript - 在 Javascript 中捕获同源异常?

我正在尝试创建自己的 XMLHttpRequest 框架来了解这些东西是如何在内部工作的。令我困惑的是,我找不到如何捕获“同源”异常。

这背后的想法是我尝试加载一个 URL,如果我得到一个同源异常,我通过脚本本地的代理脚本重新请求 URL。我这样做的原因是因为我需要从开发沙箱访问生产数据,并且我希望它对脚本本身尽可能透明。

我知道这是一种不好的做法,但这是目前最不打扰的方式:)

只是为了清除问题-我不想绕过相同的来源,我只想捕获抛出的异常,以便我可以做点什么。

这是我目前用于 xhr 的代码:

我试图尝试...赶上 xhr.send(); 但无济于事,仍然无法捕获异常。

任何想法或指针将不胜感激。

0 投票
1 回答
9101 浏览

javascript - 为什么在尝试使用 ajax 访问页面时出现 Access-Control-Allow-Origin 错误?

我正在尝试使用 ajax 从我希望能够在任何地方运行的脚本访问我网站上的一些数据。我脚本中的 ajax 代码看起来像这样

但是当我运行它时,我得到了错误

XMLHttpRequest 无法加载 http://mywebsite.com/page?i=2&json。Access-Control-Allow-Origin 不允许来源http://anotherwebsite.com 。

在我网站上的脚本上,我在页面内有以下几行,

但我仍然得到同样的错误。我希望我网站上的那个页面可以通过 ajax 从 Internet 上的任何其他页面访问,因为我的脚本是一个可以在任何网站上使用的扩展。

编辑:好的,如果我将 ajax 对象上的 'withCredentials' 属性设置为 true,并且在我的服务器上将 Access-Control-Allow-Credentials 标头设置为 true,我就可以正常工作。然后使用我的脚本,我还传递了域,因此它可以在我的服务器脚本上的 Access-Control-Allow-Origin 中返回。通配符 * 不起作用。到目前为止,这仅在 Chrome 中进行了测试。

0 投票
1 回答
2889 浏览

google-chrome - 由于我没有使用服务器,如何在 chrome 中访问和来源策略

我想更改chrome中的原始策略,如何访问和修改它?

非常感谢

0 投票
1 回答
1078 浏览

php - 绕过 AJAX 同源策略 - 一个特例

当我尝试使用 Ajax/JQuery 动态刷新页面内容时,我了解了 SOP 问题和限制,但是我想知道是否有办法解决我的小问题。

为了更容易理解,我将首先解释工作流程。

我确实通过电子邮件接收网页,即 HTML 电子邮件。网页以这种方式包含 HTML 表单,一旦表单完成,它就会被发送到适当的 Web 服务器 (php) 以存储数据。

我主要使用 Outlook 2007 作为我的电子邮件客户端(这里不要说什么,我知道!!!),但出于一些安全限制,“打开”电子邮件时禁用了 IFRAMES。我使用 VBA 脚本绕过了这个问题,该脚本复制整个页面内容,将其作为独立网页保存在文件系统上并加载到浏览器 (Firefox) 中。

页面加载到浏览器后,地址栏会显示本地/文件系统 URL,例如

到这里没问题,工作正常;现在的问题:

我希望使用 Ajax 动态更新页面内容jQuery.load,但是这就是 SOP 的用武之地。正在加载以动态更新网页的 PHP 页面被视为在另一个域上运行,因此被阻止。

我想知道如何规避这一点。

0 投票
3 回答
355 浏览

javascript - 我必须做些什么来规避 JSON 的 JavaScript 同源策略......这也适用于 XML 数据吗?

我对同源政策有疑问...

我有使用 JSON 和 XML 数据的 JavaScript 代码。我知道我需要将 JSON 更改为 JSONP,因为我的服务器位于不同的域中,但我是否只在客户端这样做?那么 XML 数据呢?也可以以某种方式跨域加载吗?

最后,是否有任何好的网站可以深入解释这一点,并附有示例?

0 投票
6 回答
127502 浏览

safari - 在 Safari 中禁用同源策略

出于开发目的,我需要在我的机器上禁用 Safari(在 Windows 上)中的同源策略。

在 Chrome 中,这可以通过使用 flag 启动来完成--disable-web-security。Safari 中是否有等效的标志或隐藏设置?

0 投票
9 回答
14162 浏览

html - HTML5 Canvas getImageData 和同源策略

我有一个在 pixie.strd6.com 上运行的站点,以及通过 Amazon S3 托管的图像,其 CNAME 为 images.pixie.strd6.com。

我希望能够将这些图像绘制到 HTML5 画布上并调用 getImageData 方法,但它会抛出Error: SECURITY_ERR: DOM Exception 18

我试过设置window.domain = "pixie.strd6.com",但没有效果。

此外,$.get("http://dev.pixie.strd6.com/sprites/8516/thumb.png?1293830982", function(data) {console.log(data)})还会引发错误:XMLHttpRequest cannot load http://dev.pixie.strd6.com/sprites/8516/thumb.png?1293830982. Origin http://pixie.strd6.com is not allowed by Access-Control-Allow-Origin.

理想情况下,HTML5 画布不会阻止getImageData来自子域的调用。我已经研究过在 S3 中设置 Access-Control-Allow-Origin 标头,但没有成功。

非常感谢任何帮助或解决方法。

0 投票
2 回答
2692 浏览

javascript - 同源策略、Javascript/jQuery AJAX 和检索 RSS XML 提要

我在使用 jQuery 检索位于外部域的 RSS 提要时遇到了问题。它在 Safari 中工作,但其他浏览器会因为同源策略限制而出错(这也记录在 $.ajax() 函数中)。

想知道我是怎么修的吗?

0 投票
3 回答
36231 浏览

javascript - 绕过本地文件系统上的 Chrome Access-control-allow-origin?

我已经阅读了关于 SO 的其他同源策略主题,但我没有看到任何与本地文件系统相关的解决方案。

我有一个必须在本地提供的网络应用程序(从广义上讲)。我试图在用户加载页面后加载大量数据,具体取决于他们在网页上所做的事情。在 Firefox 3.5 和 IE8 中,我可以使用 jQuery 的 AJAX() 和 GetScript() 方法来执行此操作,但在 Chrome 中,由于同源策略而失败。

XMLHttpRequest无法加载file://test/testdir/test.js。产地null是不允许by Access-Control-Allow-Origin的。

当我做一些简单的事情时会发生这种情况

这在 IE 和 Firefox 中运行良好。

在阅读了一堆关于此的内容后,我决定尝试直接写入文档的头部。在 Chrome 的控制台中,我输入了以下内容:

当粘贴在控制台中时,这可以正常工作 -<script...test.js</script>元素被添加到头部,评估,并将内容加载到 DOM 中。

我认为这是成功的,直到我将此代码放入函数调用中。当从函数调用相同的代码时,会将元素添加到 JavaScript 文件中,但不会评估 JavaScript 文件。我不知道为什么。如果我使用 Chrome 的控制台在将元素添加到的方法中停止执行并运行上述代码,它不会评估它。但是,如果我取消暂停执行并运行完全相同的代码(将其粘贴到控制台窗口中),它就可以工作。我无法解释这一点。以前有没有人处理过这个问题?

我已经阅读了以下 SO 帖子,但它们没有描述我遇到的问题:

规避同源策略的方法
XMLHttpRequest Origin null is not allowed Access-Control-Allow-Origin for file:/// to file:///(无服务器)
跨站 XMLHttpRequest

同样,我最后的手段是在网页加载时加载所有数据——这可能会导致加载网页时出现长达 10 秒的延迟,这对于 90% 的应用程序用户来说是不必要的。

感谢您的任何建议/替代方案!!!

0 投票
2 回答
9804 浏览

jquery - “访问被拒绝。” 使用 JQuery .ajaxForm() 在 IE8 上出错

大家好,

我是 AJAX 新手,我在使用 JQuery 1.4.4 和 jquery.form.js AJAX 插件进行同源策略保护时遇到问题。

我有一个 AJAX 联系表格,只要访问者在他们输入的 URL 前加上“www”,它就可以正常工作。但是,如果他们导航到我的网站(不使用 www),URL 仍然可以解析,但 URL 与我在 AJAX 表单中使用的不匹配。在 Chrome 中,这会导致控制台错误:

“XMLHttpRequest 无法加载http://www.example.com/。Access-Control-Allow-Origin不允许来源http://example.com 。”

在 IE8 上,我得到“访问被拒绝”。因此,即使 URL 在有或没有“www”的情况下都可以解析,如果访问者没有以“www”开头,我的 AJAX 表单也将不起作用。如果我将我的 AJAX 表单代码更改为发布到http://example.com(没有“www”),那么如果访问者导航到 www.example.com,它将无法正常工作。我想不出如何让我的代码处理这两种情况。这一定是一个几乎每个人都会遇到谁在使用 AJAX 的问题,而不管使用 JQuery。所以我一定遗漏了一些明显的东西。有人可以教育我吗?我的测试代码如下。

谢谢,

诺斯克