来自 IE 或 Firefox 的 CORS 请求中没有 Referer 标头

Posted

技术标签:

【中文标题】来自 IE 或 Firefox 的 CORS 请求中没有 Referer 标头【英文标题】:No Referer header in CORS request from IE or Firefox 【发布时间】:2015-11-18 00:25:57 【问题描述】:

我正在尝试向服务器发送 CORS POST 请求。

在 Chrome 中,这按预期工作 - 将 OPTIONS 预检请求发送到服务器,服务器以访问控制标头响应,发送 POST 请求。当我尝试在 IE 或 Firefox 中执行此操作时,不会随 OPTIONS 请求发送引用者,因此我无法添加 access-control-allow-origin 标头(因为这是以编程方式完成的)。

javascript 是:

    $.ajax(
        url: $(this).attr('href'),
        type: 'POST',
        xhrFields: 
            withCredentials: true,
        ,
        contentType: 'application/json; charset=utf-8;',
        data: JSON.stringify(data),
        success: function (response) 
            alert(response);
        ,
    );
    return false;
);

Chrome 中的 headers 如下:

Firefox 中的标头如下:

有没有办法保证引荐来源网址将与 OPTIONS 预检请求一起发送?如果没有 - 是否有另一种方法来获取引用 URL,以便我可以添加允许来源标头?

【问题讨论】:

为什么需要知道引用 URL?通常Allow-Origin根据实际安全策略设置;换句话说,该站点被配置为允许某些特定来源或所有来源。 有几个不同的 URL 需要访问,并且 URL 会根据环境(实时、登台等)而变化。因此,我根据可接受的列表检查传入的 url。如果它在那里,我将允许来源标头添加为传入 url。 嗯,好的——每天都学点东西;我曾假设 CORS 标头可以包含 URL 列表,但显然它要么是一个来源,要么是 * 【参考方案1】:

通过使用与预检请求一起发送的 Origin 标头解决了这个问题。因此,如果原始 URL 是可接受的主机之一,请在原始 url 中添加 access-control-allow-origin 标头。

【讨论】:

以上是关于来自 IE 或 Firefox 的 CORS 请求中没有 Referer 标头的主要内容,如果未能解决你的问题,请参考以下文章

CORS:在成功的 OPTIONS 请求后,Firefox 不发送 POST 请求......适用于 Chrome 和 IE

Tomcat 启用 CORS:来自 Safari 的 POST 请求返回 200,Chrome 和 Firefox 返回 403

使用 IE11 的 CORS 请求

Web Api 2 Preflight CORS 请求承载令牌

Firefox 阻止对 ASP.NET 身份更改/模拟的简单 CORS 请求

FireFox的Angularjs CORS失败