【发布时间】:2018-02-06 15:28:13
【问题描述】:
我有一个 symfony 2 后端,我已经将它安装在服务器上。我的前端是一个离子 PWA,所以它在浏览器中运行,它也安装在该服务器上,但带有另一个子域。当我从网络应用程序向后端发送请求时,我收到此错误:
选项https://api.example.com/api/login.json
XMLHttpRequest 无法加载 https://api.example.com/api/login.json。回复 预检有无效的 HTTP 状态代码 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: 未捕获的 PHP 异常 Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException: “未找到“OPTIONS /api/login.json”的路由:不允许的方法 (允许:POST)”在 /var/www/example.com/api/htdocs/symfony/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/RouterListener.php 第 163 行 {“异常”:“[对象] (Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException(代码: 0): 没有为 \"OPTIONS /api/login.json\" 找到路由: 方法不允许 (允许:POST)在 /var/www/example.com/api/htdocs/symfony/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/RouterListener.php:163, Symfony\Component\Routing\Exception\MethodNotAllowedException(代码: 0): 在 /var/www/example.com/api/htdocs/symfony/app/cache/prod/appProdUrlMatcher.php:855)"} []
因此,由于“允许”标头仅允许“POST”,因此似乎不允许发送因为 CORS 而发送的 OPTIONS 请求。那么解决所有路线的最佳方法是什么?
【问题讨论】:
标签: php api symfony request options