Я пытаюсь обработать CORS для маршрута с областью действия API. Если я получаю запрос OPTION, я немедленно возвращаю ответ, чтобы приложению не приходилось его обрабатывать. Но если я получаю запрос GET, я добавляю правильные заголовки и возвращаю обновленный ответ контроллеру (или другому промежуточному программному обеспечению, если оно есть), но тогда в контроллере объект ответа ($this->response) не имеет ранее установленного заголовков больше.
Это ошибка или RoutingMiddleware не может изменить ответ перед любым действием контроллера?
Должен ли я добавить логику CORS внутри контроллеров перед фильтром?
cakephp 4.2.12
php 8.0.1
Я пытаюсь обработать CORS для маршрута с областью действия API. Если я получаю запрос OPTION, я немедленно возвращаю ответ, чтобы приложению не приходилось его обрабатывать. Но если я получаю запрос GET, я добавляю правильные заголовки и возвращаю обновленный ответ контроллеру (или другому промежуточному программному обеспечению, если оно есть), но тогда в контроллере объект ответа ($this->response) не имеет ранее установленного заголовков больше. [code]$routes->plugin( 'Ark', ['path' => '/ark'], function (RouteBuilder $routes) { $routes->setRouteClass(DashedRoute::class); $routes->registerMiddleware('cors', function($req, $res, $next) { $lAllowed = [ 'localhost:8081', 'localhost:8082', 'localhost:8087', '172.16.1.225', '172.16.1.225:8081', '172.16.1.225:8082', '172.16.1.225:8087', '172.16.1.224', ];
$res = $res->cors($req) ->allowOrigin($req->getHeader('origin')) //only one host should be allowed when allow credentials is true ->allowMethods(['GET', 'OPTIONS']) ->allowHeaders(['Content-Type', 'X-CSRF-Token', 'Authorization']) ->allowCredentials() ->maxAge(3600) //1h ->build();
//return immediately for CORS requests if ( strtoupper($req->getMethod()) === 'OPTIONS' ) { return $res->withStatus(200, 'You shall pass!!'); }
//default landing page $routes->connect('/', ['controller' => 'Pages']); } ); [/code] Это ошибка или RoutingMiddleware не может изменить ответ перед любым действием контроллера? Должен ли я добавить логику CORS внутри контроллеров перед фильтром? cakephp 4.2.12 php 8.0.1