为什么这个简单的CORS GET失败了?

时间:2016-05-25 11:50:27

标签: javascript ajax .htaccess cors

我有一台运行apache的服务器。 .htaccess包含以下内容:

<IfModule mod_headers.c>
  <FilesMatch "\.(eot|ttf|otf|woff|css)$">
    Header add Access-Control-Allow-Origin "*"
  </FilesMatch>
</IfModule>

为什么会这样?

$.get('https://www.sarahlawrence.edu/_assets/v6/fonts/otama-text-regular/otamatextregular.eot')`

有效(在任何域的控制台中尝试),而

$.get('https://www.sarahlawrence.edu/_assets/v6/lib/icons.data.svg.css')

因此错误而失败:

  

XMLHttpRequest无法加载https://www.sarahlawrence.edu/_assets/v6/lib/icons.data.svg.css。 No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。起源&#39; https://whatever.com&#39;因此不允许访问。

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:2)

可以使用curl确认丢失的标题:

 curl -v https://www.sarahlawrence.edu/_assets/v6/fonts/otama-text-regular/otamatextregular.eot > delme.txt

 curl -v https://www.sarahlawrence.edu/_assets/v6/lib/icons.data.svg.css > delme.txt

正则表达式应该对文件名感到满意,所以我希望问题是因为apache配置中某处存在冲突配置。 另一个诊断检查是将失败的文件复制到fonts目录并检查标头是否存在 - 这将确认正则表达式或文件名不是问题,但表明它与目录配置相关。

您已声明文档根目录或子文件中没有其他.htaccess文件(这可能会导致问题)并且文件正在没有标题的情况下提供。

我在这个阶段的感觉是,这可能与你的mod_pagespeed有关,而这对于lib / icons是禁用的。它甚至可以归结为正在加载的模块的排序。

为了以防万一,我会先重启你的apache。应禁用其间的任何缓存或代理基础结构。接下来我将禁用mod_pagespeed并查看问题是否仍然存在。

我还要检查一下你的httpd.conf或虚拟主机配置中是否有一个配置块,因为它可能会捕获一些目录而不是其他目录,并且你的.htaccess不是做着预期的事。作为进一步检查,我会尝试删除或暂时重命名.htaccess(删除htaccess或类似内容)以确认使用curl或其他方法验证CORS标头不再包含URL请求标头。

可能没有关联,但我检查的另一件事是文件和目录的权限和所有权 - 值得一提的是以防万一。

同样值得检查重启apache和发出请求时的错误日志,这可能会提供进一步的见解。

答案 1 :(得分:0)

.htaccess文件的完整路径是什么?

以太网.htaccess文件未设置为将其应用于https://www.sarahlawrence.edu/_assets/v6/lib/位置中的文件的规则,或者其他规则取代上面显示的规则。