来自 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
Web Api 2 Preflight CORS 请求承载令牌