问题标签 [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.
javascript - 在 Javascript 中捕获同源异常?
我正在尝试创建自己的 XMLHttpRequest 框架来了解这些东西是如何在内部工作的。令我困惑的是,我找不到如何捕获“同源”异常。
这背后的想法是我尝试加载一个 URL,如果我得到一个同源异常,我通过脚本本地的代理脚本重新请求 URL。我这样做的原因是因为我需要从开发沙箱访问生产数据,并且我希望它对脚本本身尽可能透明。
我知道这是一种不好的做法,但这是目前最不打扰的方式:)
只是为了清除问题-我不想绕过相同的来源,我只想捕获抛出的异常,以便我可以做点什么。
这是我目前用于 xhr 的代码:
我试图尝试...赶上 xhr.send(); 但无济于事,仍然无法捕获异常。
任何想法或指针将不胜感激。
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 中进行了测试。
google-chrome - 由于我没有使用服务器,如何在 chrome 中访问和来源策略
我想更改chrome中的原始策略,如何访问和修改它?
非常感谢
php - 绕过 AJAX 同源策略 - 一个特例
当我尝试使用 Ajax/JQuery 动态刷新页面内容时,我了解了 SOP 问题和限制,但是我想知道是否有办法解决我的小问题。
为了更容易理解,我将首先解释工作流程。
我确实通过电子邮件接收网页,即 HTML 电子邮件。网页以这种方式包含 HTML 表单,一旦表单完成,它就会被发送到适当的 Web 服务器 (php) 以存储数据。
我主要使用 Outlook 2007 作为我的电子邮件客户端(这里不要说什么,我知道!!!),但出于一些安全限制,“打开”电子邮件时禁用了 IFRAMES。我使用 VBA 脚本绕过了这个问题,该脚本复制整个页面内容,将其作为独立网页保存在文件系统上并加载到浏览器 (Firefox) 中。
页面加载到浏览器后,地址栏会显示本地/文件系统 URL,例如
到这里没问题,工作正常;现在的问题:
我希望使用 Ajax 动态更新页面内容jQuery.load
,但是这就是 SOP 的用武之地。正在加载以动态更新网页的 PHP 页面被视为在另一个域上运行,因此被阻止。
我想知道如何规避这一点。
javascript - 我必须做些什么来规避 JSON 的 JavaScript 同源策略......这也适用于 XML 数据吗?
我对同源政策有疑问...
我有使用 JSON 和 XML 数据的 JavaScript 代码。我知道我需要将 JSON 更改为 JSONP,因为我的服务器位于不同的域中,但我是否只在客户端这样做?那么 XML 数据呢?也可以以某种方式跨域加载吗?
最后,是否有任何好的网站可以深入解释这一点,并附有示例?
safari - 在 Safari 中禁用同源策略
出于开发目的,我需要在我的机器上禁用 Safari(在 Windows 上)中的同源策略。
在 Chrome 中,这可以通过使用 flag 启动来完成--disable-web-security
。Safari 中是否有等效的标志或隐藏设置?
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 标头,但没有成功。
非常感谢任何帮助或解决方法。
javascript - 同源策略、Javascript/jQuery AJAX 和检索 RSS XML 提要
我在使用 jQuery 检索位于外部域的 RSS 提要时遇到了问题。它在 Safari 中工作,但其他浏览器会因为同源策略限制而出错(这也记录在 $.ajax() 函数中)。
想知道我是怎么修的吗?
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% 的应用程序用户来说是不必要的。
感谢您的任何建议/替代方案!!!
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。所以我一定遗漏了一些明显的东西。有人可以教育我吗?我的测试代码如下。
谢谢,
诺斯克