javascript - 为什么这个简单的 CORS GET 会失败?

标签 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 cannot load https://www.sarahlawrence.edu/_assets/v6/lib/icons.data.svg.css. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://whatever.com' is therefore not allowed access.

我怎样才能让它工作?

最佳答案

可以使用 curl 确认丢失的 Header:

 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 配置中某处存在配置冲突。 另一个诊断检查是将失败的文件复制到字体目录中并检查 header 是否存在 - 这将确认正则表达式或文件名不是问题,但表明它与目录配置相关。

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

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

通常我会先重启你的apache以防万一。两者之间的任何缓存或代理基础设施都应该被禁用。接下来我将禁用 mod_pagespeed 并查看问题是否仍然存在。

我还会检查您的 httpd.conf 或虚拟主机配置中是否有类似的配置 block ,因为这可能会捕获某些目录而不是其他目录,并且您的 .htaccess 不会做预期的事情。作为进一步检查,我会尝试删除或临时重命名 .htaccess(更改为 htaccess-removed 或类似名称)以确认不再使用 curl 或其他方法来验证 CORS header 来包含 URL 请求 header 。

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

还值得检查有关重新启动 apache 和发出请求的错误日志,因为这可能会提供进一步的见解。

关于javascript - 为什么这个简单的 CORS GET 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37436274/

相关文章:

javascript - 光滑的轮播拖动事件

javascript - 使用 AJAX 从函数调用中填充 Select2

php - .htaccess 不允许 $_GET 工作

regex - %{REQUEST_URI} 总是以斜杠开头吗?

javascript - 无法更新局部变量

javascript - 如何使用 Javascript 获取日期差

javascript - 在 http 站点上设置来自 https 的 cookie

如果 url 包含 Catalogsearch/result/?q=SOMETHING 使用 .htaccess,Apache 将 URL 重写为小写

javascript - 使用 JavaScript API 的 Tableau 全屏 View

php - 我究竟可以从 jQuery AJAX 请求返回什么?