2016-05-25 3 views
1

У меня есть сервер, на котором работает apache. .htaccess содержит следующее:Почему этот простой CORS GET не работает?

<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.

И как я могу заставить его работать?

+0

Ну второй не возвращает Access-Control-Allow-Origin, как говорится в сообщении об ошибке. Вы уверены, что .htaccess правильно/работает правильно? – Danmoreng

+0

@ user2415266 Да, я считаю, что htaccess работает правильно, так как остальная часть сайта работает так, как ожидалось. Что второй возвращается для вас? Сообщение об ошибке выше было из Chrome. Firefox дает «запрос на перекрестный запрос заблокирован: политика одного и того же происхождения запрещает чтение удаленного ресурса по адресу https://www.sarahlawrence.edu/_assets/v6/lib/icons.data.svg.css. (Причина: заголовок CORS 'Access -Control-Allow-Origin 'отсутствует. " – thugsb

+0

Я уверен, что проблема заключается в вашем регулярном выражении в правиле FilesMatch, так как ваш файл css называется «icons.data.svg.css», он не будет найден как «.css» – Danmoreng

ответ

2

Отсутствующий Заголовок может быть подтверждена с помощью завиток:

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. Другой диагностической проверкой будет копирование файла с ошибкой в ​​каталог шрифтов и проверка наличия заголовка - это подтвердит, что регулярное выражение или имя файла не является проблемой, но указывает, что это связано с конфигурацией каталога.

Вы заявили, что в корневом каталоге или дочерних документах нет других файлов .htaccess (это может вызвать проблему), и файл обслуживается без заголовков.

Мое чувство на этом этапе состоит в том, что это может быть связано с вашей mod_pagespeed, которая отключена для lib/icons. Это может привести даже к упорядочению загружаемых модулей.

Trivially Я бы сначала перезапустил ваш apache на всякий случай. Любая инфраструктура кэширования или прокси-сервера между ними должна быть отключена. Затем я отключу mod_pagespeed и посмотрю, останется ли проблема.

Я также хотел бы проверить, есть ли какой-либо блок конфигурации в вашей конфигурации httpd.conf или виртуальных хостах, что похоже на то, что это захватывает некоторые каталоги, а не другие, и что ваш .htaccess не делая того, что ожидается. В качестве дополнительной проверки я попытался удалить или временно переименовать .htaccess (в htaccess-удален или что-то подобное), чтобы подтвердить, что заголовки запросов URL больше не включаются с помощью завитки или других подходов к проверке заголовков CORS.

Возможно, не связано, однако, еще одно, что я хотел бы проверить, это разрешения и права собственности на файлы и каталоги - на самом деле стоит упомянуть.

Также стоит проверить журналы ошибок при перезапуске apache и при выполнении запросов, поскольку это может дать дополнительную информацию.

+0

Это действительно был mod_pagespeed, вызывающий проблему. Как только я добавил 'ModPagespeedDisallow '*/lib/icon *" 'в мой .htaccess, он начал работать. Благодаря! – thugsb

0

Что такое полный путь к вашему .htaccess файлам?

Эфир ваш .htaccess файл не настроен так, чтобы он применял свои правила к файлам в каталоге https://www.sarahlawrence.edu/_assets/v6/lib/, или есть другое правило где-то еще, заменяющее правило, которое вы указали выше.

+0

Файл .htaccess находится в корне сервера, то есть /.htaccess. Нет другого файла .htaccess в папках/lib/or/fonts/folders (или папках предков тех, за исключением одного в корне сервера), и нет другой ссылки на любую папку в .htaccess, за исключением того, что mod_pagespeed является отключено для * lib/icons *. – thugsb