Конфликт CORS после включения FPM в PHP

Конфликт CORS после включения FPM в PHP

В файле .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:

Связанный контент