Итак, у нас есть API с CakePHP 3.7.Мы используем resources
для генерации методов CRUD.API размещен на сервере с apache2 и доступен через приложение менеджера с помощью React (это приложение является микросервисом).Менеджер выполняет вызовы через axios
и правильно управляет запросами GET, POST и HEAD (простые запросы CORS), но у нас возникают проблемы, когда речь идет о более сложных запросах, таких как PUT или DELETE.
При выполнении запросов PUT или DELETE он выполняет предварительный запрос OPTIONS и возвращает ошибку 404 Not Found.И некоторые сообщения в консоли, связанные с CORS:
Мы уже пробовалинесколько исправлений, таких как плагин CakePHP CORS , добавление заголовков CORS в ответ в методах beforeRender и beforeFilter AppController, а также добавление заголовков CORS в apache, ни один из этих швов не работал.
private function setCorsHeaders() {
$this->response->cors($this->request)
->allowOrigin(['*'])
->allowMethods(['*'])
->exposeHeaders(['X-Total-Pages'])
->maxAge(800)
->build();
}
public function beforeRender(Event $event)
{
$this->setCorsHeaders();
}
public function beforeFilter(Event $event)
{
if($this->request->is('options')) {
$this->setCorsHeaders();
return $this->response;
}
}
Header set Access-Control-Expose-Headers "X-Total-Pages"
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS"
Ожидаемое поведение состоит в том, что методы PUT и DELETE выполняются должным образом (предварительные параметры должны пройти успешно).Любая помощь приветствуется.