javascript - 当你不控制服务器时跨源资源共享?

标签 javascript node.js xml cors

我有一个 Web 应用程序,我想在其中使用其他网页中的信息。一个典型的示例是从预报服务获取 XML 格式的天气信息。说“https://www.yr.no/place/United_States/New_York/New_York/varsel.xml”。当我尝试将 GET 请求与 XMLHttpRequest 一起使用时,我收到典型的跨源错误。

解决此问题的简单方法是让服务器允许 CORS。但是如果我无法控制给定的服务器怎么办?还有其他方式请求数据吗?

我尝试过 Chrome 的 Enable-CORS 扩展,但这不是一个好的解决方案。此外,如果您请求数据的网站需要身份验证(例如用户名/密码),则它不起作用。

我似乎找不到有关此问题的任何信息,但如果这是重复的,我深表歉意。

最佳答案

对于只想获取网络上公开可用资源的内容(如https://www.yr.no/place/United_States/New_York/New_York/varsel.xml)的简单情况并在前端 JavaScript 代码中使用它做一些事情,您不需要设置自己的代理,而只需使用现有的开放公共(public) CORS 代理,例如 https://cors-anywhere.herokuapp.com/ .

而不是将 https://www.yr.no/place/United_States/New_York/New_York/varsel.xml 提供给 XHR/Fetch 调用(或 jQuery.get() 或 axios 或任何调用),你给它这个 URL:

https://cors-anywhere.herokuapp.com/https://www.yr.no/place/United_States/New_York/New_York/varsel.xml

通过开放的 CORS 代理发送请求 https://cors-anywhere.herokuapp.com它将 Access-Control-Allow-Origin 响应 header 添加到其中,然后将其作为响应传递回您的请求前端代码。

带有 Access-Control-Allow-Origin 响应 header 的响应是浏览器看到的内容,因此浏览器允许您的前端 JavaScript 代码实际访问该响应。

但是,如果您请求数据的网站需要身份验证,那么您不希望通过第三方代理(如 https://cors-anywhere.herokuapp.com)发出请求。 -因为那样你就会将凭据暴露给第三方(第三方代理的所有者)。

但对于这种情况,使用 https://github.com/Rob--W/cors-anywhere 中的代码设置您自己的私有(private)代理是相当快速和容易的。或类似的东西,或者以其他方式在现有后端代码中设置一些简单的代理机制。

关于javascript - 当你不控制服务器时跨源资源共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44553816/

相关文章:

基于随机数的Javascript css类

node.js - 如何协调全局 webpack 安装和本地加载器

javascript - 在多个文件中具有相同的 `require` 是否会增加运行时间

xml - 在 Windows 上使用包 XML 时发生内存泄漏

javascript - 如何重新加载 JSONObject 内容

javascript - 如何制作动画以在框架中绕圈移动图像?

javascript - Nodejs 中带有状态的 Ajax 调用

java - 避免在anyElement上重复命名空间定义

android - 将颜色链接到 Android 中的其他颜色 xml

javascript - 显示函数被调用的位置,而不是定义它的位置 console javascript