跨域请求的解决方法

Posted

技术标签:

【中文标题】跨域请求的解决方法【英文标题】:Workaround for Cross Domain Request 【发布时间】:2021-11-29 20:55:51 【问题描述】:

我正在尝试执行以下代码以使用 javascript 打开 URL

var Urlone = document.getElementById('00N0b00'),

opening = window.open(Urlone),
            
opening.onload = function() 

var Urltwo = opening.document.getElementById('00GG')

window.open(Urltwo);

当 Urlone 与 Origin URL 来自同一个域时,这有效并打开 Urltwo,但当 Urlone 来自与 Origin 不同的域时,Urltwo 不会打开。

我知道它的因为或 CORS 标准,但我需要帮助来解决这个问题。

我已经尝试下载可以放松 CORS 的 chrome 扩展,但它不起作用。我不想使用 jquery 或 anyorigin.com。 寻找使用 javascript 的可能解决方案。

【问题讨论】:

【参考方案1】:

CORS(跨域资源共享)是一个由传输 HTTP 标头组成的系统,用于确定浏览器是否阻止前端 JavaScript 代码访问跨域请求的响应。 (https://developer.mozilla.org/en-US/docs/Glossary/CORS)

当跨域资源共享被禁用时,您无法将 JavaScript 注入窗口,这是设计使然。

可能的解决方法:

在 Urltwo 的服务器上更改 CORS 标头 通过 HTTP 请求获取 Urltwo 的源并将其呈现在空白 iframe 中(适用性会有所不同)。编辑:如果请求是从 JavaScript 发起的,这也将受到 CORS 的约束。

如果您有权访问服务于 Urltwo 的服务器,则更改 CORS 设置是最佳解决方案。 如果您无权访问服务器,但可以编辑在Urltwo 提供的文档,则可以通过document.postMessage (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) 或通过在 URL 中编码信息(查询字符串或哈希)在文档之间进行通信. 如果您都无法访问,则可以使用代理获取 Urltwo 的内容,发送正确的 CORS 标头并将结果发送回给您。

【讨论】:

以上是关于跨域请求的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

vue跨域解决方法

jQuery跨域请求带Cookie和Session的方法

OPTIONS 方法在跨域请求(CORS)中的应用

http跨域预检问题

ajax本地跨域请求以及解决方法

前端设置请求头可以解决跨域问题吗