旧系统的 CORS 问题 - 没有“访问控制允许源”标头

CORS Issue with Legacy System - No 'Access-Control-Allow-Origin' header

本文关键字:访问控制 许源 标头 没有 系统 CORS 问题      更新时间:2023-09-26

--Ajax 方法调用以获取 HTML 格式的响应

function send_with_ajax(brand) {
    var httpRequest = new XMLHttpRequest();
    httpRequest.onreadystatechange = function() { alertContents(httpRequest); };  
    httpRequest.open("GET", "https://XXXX--LEGACY SYSTEM--XXXX", true);
    httpRequest.setRequestHeader( 'Access-Control-Allow-Origin', 'https://XXXX--LEGACY SYSTEM's IP Address--XXXX/');
    httpRequest.send(null);
}
function alertContents(httpRequest) {
    alert(httpRequest.readyState);
    if (httpRequest.readyState == 4) {
        // everything is good, the response is received
        if ((httpRequest.status == 200) || (httpRequest.status == 0)) {
            //Get the httpRequest.responseText
        } else {
            //Error with the response or Failed to load the response;
        }
    }
}

嗨,在上面的 JS 代码中,我创建了一个 activeX 对象来攻击遗留系统(这意味着端点 Java 中不存在与 CORS 相关的 API(。遵循相同的操作,我希望收到 HTML 格式类型的响应。这在IE(HTML代码类型(中工作正常,但是当使用Chrome(移植到HTML5代码类型(尝试相同时,我最终遇到了CORS问题。还行。。。它发生了,我试图在这里设置标题以解决它,但它也是徒劳的。有没有办法解决这个问题。请注意,我正在尝试与端点 java 组件无法进行任何修改的遗留系统进行交互。请帮助!!

您不会在请求中设置Access-Control-Allow-Origin,而是在响应中设置它(以及其他几个必需的标头(。服务器是决定是否允许跨源请求的地方(然后浏览器实现的决定(。

我正在尝试与端点 Java 组件无法进行任何修改的遗留系统进行交互

然后,您无法使用来自其他源的 ajax 直接查询它。相反,您需要某种代理,例如在服务器(或另一台服务器上(上运行的第二个进程,您可以查询该进程,进而查询您实际想要与之通信的进程。这是有效的,因为SOP适用于来自浏览器的请求,但非浏览器可以根据需要执行跨源请求。

有几个"CORS 代理"项目(这对它们来说是一个合理的搜索词(,既可以在服务器上运行,也可以像 crossorigin.me 一样直接使用(只是一个示例,不是认可;不知道它是否有任何好处(。如果您使用服务,自然必须信任它们,因为所有数据(双向(都流经其服务器......

克服跨源限制的一种方法是使用 yql yahoo 控制台。您可以在具有不同域的网站之间传输数据(根据您的情况也可以使用 html(。你可以在这里查看。在左侧菜单中,转到data->html并进行查询,例如select * from html where url="http://your.different.domain.com"然后只需使用雅虎提供的网址即可,而不会出现限制问题