Как решить проблему CORS при работе с Wordpress API?

Стек: Vue, Nuxt, Wordpress API.
При выполнении запроса на
https://site/wp-json/wp/v2/pages/2
всё работает, а вот при указании языка валится ошибка
Access to XMLHttpRequest at 'https://site/wp-json/wp/v2/pages/2?lang=en' from origin 'localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Пробовал указывать 'Access-Control-Allow-Origin': '*' и в functions.php и в конфиге axios. Результата нет.
Проблема возникает в случаях когда
- Проект локально, а WP на хостинге
- Проект на хостинге, а WP на поддомене.

Как решить проблему?
Можно ли как-то настроить, что бы cors не валил ошибку именно при запросе от конкретного url?
  • Вопрос задан
  • 5713 просмотров
Решения вопроса 1
@grinat
Указания Access-Control-Allow-Origin в php недостаточно, надо еще поддержку options включить. js тут вообще не при чем, там ты ничего не настроишь, разрешает делать кросзапрос исключительно сервер.
prelight.png
см https://developer.mozilla.org/ru/docs/Web/HTTP/CORS

Ах да, можно еще в http сервере(в nginx либо в apache) все настроить:
https://enable-cors.org/server_nginx.html
https://benjaminhorn.io/code/setting-cors-cross-or...
в этом случае php дергать нет нужды
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
azerphoenix
@azerphoenix
Java Software Engineer
Если мне память не изменяет, то я сталкивался с этим при работе на Java Wordpress REST API. Мне помог этот плагин - https://github.com/WP-API/Basic-Auth
А хотя, у вас другая ситуация - https://stackoverflow.com/questions/53129894/acces...
Ответ написан
Комментировать
xakplant
@xakplant
Автор сайта xakplant.ru
В некоторых случаях заголовок Access-Control-Allow-Origin не достаточно поставить в значение "*". Для некоторых ситуаций нужно указывать точный адрес которого можно отправлять запросы, например, если вы пытаетесь авторизоваться на сервере, предать заголовки или вам нужно прочитать заголовки ответа.
Я написал несколько примером в статье. Возможно кому-то пригодиться
Ответ написан
Комментировать
SayMAN83
@SayMAN83
Работаю в IT
Столкнулся с этим на c# и ангуляр. В общем как узнал, по умолчанию кросс доменные соединения на js отключены из-за безопасности. Поэтому надо настраивать cors. Как раз включить поддержку Access-Control-Allow-Origin.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы