如何使用javascript解决cors? [复制]

Posted

技术标签:

【中文标题】如何使用javascript解决cors? [复制]【英文标题】:how to solve cors using javascript? [duplicate] 【发布时间】:2020-07-17 12:22:43 【问题描述】:

我正在尝试建立一个新闻聚合网站,我是一个初学者。向https://timesofindia.indiatimes.com/rssfeeds/-2128816011.cms xml rss feed as 发出请求时出现错误

错误 1:“从源 'null' 访问 XMLHttpRequest 在 'https://timesofindia.indiatimes.com/rssfeeds/-2128816011.cms' 已被 CORS 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。”

错误 2:“GET https://timesofindia.indiatimes.com/rssfeeds/-2128816011.cms net::ERR_FAILED”

我使用下面的代码来解决,但没有成功。

makeCorsRequest();

function createCORSRequest(method, url) 
    var xhr = new XMLHttpRequest();
    if ("withCredentials" in xhr) 
        // XHR for Chrome/Firefox/Opera/Safari.
        xhr.open(method, url, true);
     else if (typeof XDomainRequest != "undefined") 
        // XDomainRequest for IE.
        xhr = new XDomainRequest();
        xhr.open(method, url);
     else 
        // CORS not supported.
        xhr = null;
    
    return xhr;


// Helper method to parse the title tag from the response.
function getTitle(text) 
    return text.match('<title>(.*)?</title>')[1];


// Make the actual CORS request.
function makeCorsRequest() 
    // This is a sample server that supports CORS.
    var url = 'https://timesofindia.indiatimes.com/rssfeeds/-2128816011.cms';

    var xhr = createCORSRequest('GET', url);
    if (!xhr) 
        alert('CORS not supported');
        return;
    

    // Response handlers.
    xhr.onload = function() 
        var text = xhr.responseText;
        var title = getTitle(text);
        alert('Response from CORS request to ' + url + ': ' + title);
    ;

    xhr.onerror = function() 
        alert('Woops, there was an error making the request.');
    ;

    xhr.send();

【问题讨论】:

【参考方案1】:

您无法避免这种情况,因为您请求的 URL,它的服务器不接受来自其他来源的 xhr 请求,然后是他们的网站(没有来自那里的服务器的 Access-Control-Allow-Origin: * 标头)

所以要解决这个问题,你有:

除非https://timesofindia.indiatimes.com 网站应该将标头Access-Control-Allow-Origin: * 添加到他们的应用服务器,我猜这是不可能的。


或者您必须创建小型后端应用程序(node、java、python php ...),例如 mybackend.example.com/indiafeedcall 只调用 url 并返回其结果 (xml),并且不要忘记在响应中添加标头 @ 987654325@ ,因此您的客户端 js 将使用 mybackend.example.com/indiafeedcall 而不是原始 url 。

【讨论】:

好的,我没有得到你的第二点 @FaraazHamza,我的意思是,你像代理一样创建一个应用程序,它自己会与 url 建立 http 连接,然后将 xml 作为结果发回,(当然你在这个应用程序中设置了 header cors ) 然后在你的 javascript 代码中使用 app url 服务 非常感谢。知道了,但是我有一个第三方网站可以完成这项工作(你提到的第二点)。 @FaraazHamza 不客气 :) 祝你好运!

以上是关于如何使用javascript解决cors? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

javascript 如何解决Express中的CORS问题?

如何通过我的 api 调用绕过 CORS 限制? [复制]

如何使用 Angular 消除 Spring Boot 中的 CORS 错误? [复制]

如何在 Spring Boot 中使用 Spring Security 配置 CORS? [复制]

请求跨域解决方法CORS

发出 POST 请求时如何防止触发 CORS? [复制]