为什么未始终为CORS请求发送Origin HTTP标头?

时间:2020-03-25 08:13:11

标签: http cors

我在primary.example.com有一个站点,该站点提供一个页面,其中包含来自other.example.com的javascript文件

该javascript向GET发出XHR / ajax other.example.com/data.json请求

我认为这是一个CORS请求,因为来源应为primary.example.com

因此,我期望data.json请求包含Origin标头。浏览器应将此内容添加到javascript请求中,因为它要与加载页面时使用的域不同。

我测试过的所有浏览器(Chrome,Firefox,WebKit)都可以执行此操作。但是在查看服务器日志时,我看到许多对data.json的请求被服务器other.example.com拒绝,因为它们没有在请求中发送Origin头。为什么会这样?

编辑

我不知道这是否相关,但是我只是想可能是:初始页面加载是由来自另一台服务器的302重定向触发的。

整个过程是这样的:

UML sequence diagram

在此图中,请求➐是AJAX请求,通常是 而不是总是 并在请求中带有Origin标头发送。

1 个答案:

答案 0 :(得分:0)

我相信这可能是收件箱扫描器/链接预览器等。我发现检查了其中10个IP地址:它们都属于Microsoft。

我现在正在考虑,他们有一些自动化的过程来嗅探在邮件扫描过程中发送的链接(大多数人都通过电子邮件将链接发送到该页面),也许要检查它看起来合法吗?生成预览。

我正在将PHP FPM与nginx一起使用,在这些情况下,根本没有Origin标头;因为在HTTP_ORIGIN数组中没有名为$_SERVER的键。

我相信,正如最新的评论者所说,这不应该发生:这是无效的CORS行为。因此,它正在发生的事实表明某些非正常的浏览过程正在产生这种情况。 (请注意,绝大多数流量 是有效的; 确实具有Origin标头。)此外,我们还没有收到任何人抱怨该站点已损坏-这是为了保护在冠状病毒期间面临困难的脆弱人群的请愿书,您认为大多数访问该页面的人都希望在请愿书上签名(这需要CORS);以我的经验,如果这样的人不起作用,通常他们会很发声。

邮件扫描程序是我的结论。

相关问题