我有一个symfony 2后端,我已经安装在服务器上。我的前端是离子PWA,因此它在浏览器中运行,并且也安装在该服务器上,但是与其他子域一起安装。当我送从Web应用程序的请求到后台,我得到这个错误:Symfony 2 - 允许选项请求
OPTIONS https://api.example.com/api/login.json
XMLHttpRequest cannot load https://api.example.com/api/login.json . Response for preflight has invalid HTTP status code 405
这是我的登陆行动代码:
/**
* Login via username and password or via API key
*
* @Doc\ApiDoc(
* section="Security",
* description="Login",
* views={"default", "security"}
*)
*
* @param ParamFetcher $params
*
* @Rest\RequestParam(name="username", nullable=true, description="Username")
* @Rest\RequestParam(name="password", nullable=true, description="Password")
* @Rest\RequestParam(name="apikey", nullable=true, description="API key (alternative to username + password)")
*
* @Rest\Post("/login", name="api_security_login", options={"method_prefix" = false})
*
* @return Response
*/
public function loginAction(ParamFetcher $params)
{
//...do some stuff here...//
$data = array(
'user' => $userValue,
'apikey' => $user->getApiKey(),
);
$groups = array('default', 'private');
return $this->createAPIResponse(self::STATUS_OK, $data, $groups);
}
这是从响应头:
Access-Control-Allow-Methods:GET,POST,OPTIONS,DELETE,PUT
Access-Control-Allow-Origin:*
Allow:POST
Cache-Control:no-cache
Connection:Keep-Alive
Content-Length:54
Content-Type:application/json
Date:Tue, 29 Aug 2017 08:33:26 GMT
Keep-Alive:timeout=5, max=100
Server:Apache
这是prod.log文件中的错误消息:
request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException: "No route found for "OPTIONS /api/login.json": Method Not Allowed (Allow: POST)" at /var/www/example.com/api/htdocs/symfony/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/RouterListener.php line 163 {"exception":"[object] (Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException(code: 0): No route found for \"OPTIONS /api/login.json\": Method Not Allowed (Allow: POST) at /var/www/example.com/api/htdocs/symfony/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/RouterListener.php:163, Symfony\Component\Routing\Exception\MethodNotAllowedException(code: 0): at /var/www/example.com/api/htdocs/symfony/app/cache/prod/appProdUrlMatcher.php:855)"} []
所以看起来像OPTIONS请求,这是因为CORS,因为“允许”标题,只允许“POST”被允许发送。那么,修复所有路线的最佳方法是什么?
已经与'''试了一下@Rest \ Options(“/ login”,name =“api_security_login_options”,options = {“method_prefix”= false})'''在邮政下面,但仍然是同样的问题 – Nono