IE或Firefox的CORS请求中没有Referer头信息

3

我想向服务器发送一个CORS POST请求。

在Chrome中,这个请求可以正常工作 - 发送OPTIONS预检请求到服务器,服务器响应访问控制头,然后发送POST请求。但是当我尝试在IE或Firefox中执行此操作时,OPTIONS请求没有发送referer,因此我无法添加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浏览器的头部信息如下: Chrome headers Firefox浏览器的头部信息如下: Firefox headers 是否有方法可以确保在OPTIONS预检请求中发送引用者?如果没有,是否有另一种方法可以获取引用URL,以便我可以添加允许来源头部?

1
为什么需要知道引用URL?通常情况下,“Allow-Origin”是基于实际安全策略设置的;换句话说,该站点被配置为允许某些特定来源或所有来源。 - Pointy
有几个不同的URL需要访问,而且这些URL根据环境(生产、暂存等)而变化。因此,我会将传入的URL与可接受的URL列表进行比对。如果存在于列表中,我就会将允许来源头添加为传入的URL。 - Bonnotbh
啊,好的 - 每天都可以学到一些东西;我曾经认为CORS标头可以包含URL列表,但显然只能是一个源或 * - Pointy
1个回答

2

通过使用随预检请求发送的 Origin 标头解决了此问题。因此,如果 Origin URL 是可接受的主机之一,则添加带有原始 URL 的 access-control-allow-origin 标头。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接