
В файле .htaccess на моем веб-сервере установлен следующий заголовок CORS:
Header set Access-Control-Allow-Origin "example.com"
В одном из моих PHP-скриптов, который я часто вызываю при работе с локального хоста, у меня установлен следующий заголовок:
header("Access-Control-Allow-Origin: *");
Это работало для меня до вчерашнего дня, пока я не включил FPM для PHP. Теперь я получаю следующую ошибку:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.example.com/script.php. (Reason: CORS header 'Access-Control-Allow-Origin' does not match '*, example.com').
Я получаю эту ошибку только при вызове с локального хоста, а не при вызове с веб-сайта. Мне интересно, есть ли способ переопределить .htaccess
заголовок CORS через PHP теперь, когда включен FPM.
решение1
Причина: заголовок CORS «Access-Control-Allow-Origin» не соответствует «*, example.com»
Любопытно, это как если бы Header merge
было вызвано , а не Header set
? «Объединенные» значения, подобные этому, официально не поддерживаются заголовком Allow-Control-Allow-Origin
, поэтому поддержка браузеров может различаться, и это объяснит, почему это не работает у вас.
есть ли способ переопределить
.htaccess
заголовок CORS через PHP теперь, когда включен FPM.
Я думаю, вам нужно попытаться сделать так, чтобы Apache не переопределял заголовок, установленный PHP (который установлен ранее), а не PHP переопределял Apache. Попробуйте действие setifempty
:
Header setifempty Access-Control-Allow-Origin "example.com"
Вы также можете попробовать always
условие, например: Header always set ....
- это другая «группа» заголовковпо умолчанию onsuccess
и должно означать, что заголовок фактически устанавливается дважды.
Однако я не считаю, что множественные Access-Control-Allow-Origin
заголовки являются строго частью стандарта, поэтому поведение браузеров может различаться.
См. также следующий связанный вопрос на StackOverflow: