Php &引用;405“不允许使用方法”;发出AJAX请求时

Php &引用;405“不允许使用方法”;发出AJAX请求时,php,symfony,cors,symfony4,Php,Symfony,Cors,Symfony4,我正在制作简单的todo应用程序,后端是Symfony 4,前端是Vue.js 由于未知原因,我得到了一个405错误状态,因为其他一些端点工作正常 这是我的listController的一部分: /** * @return \FOS\RestBundle\View\View */ public function getListsAction() { $data = $this->taskListRepository->findAll(); return $this

我正在制作简单的todo应用程序,后端是Symfony 4,前端是Vue.js

由于未知原因,我得到了一个
405
错误状态,因为其他一些端点工作正常

这是我的
listController
的一部分:

/**
 * @return \FOS\RestBundle\View\View
 */
public function getListsAction()
{
    $data = $this->taskListRepository->findAll();
    return $this->view($data, Response::HTTP_OK);
}


/**
 * @Rest\RequestParam(name="title", description="Title of the list", nullable=false)
 * @param ParamFetcher $paramFetcher
 * @return \FOS\RestBundle\View\View
 */
public function postListsAction(ParamFetcher $paramFetcher)
{
    $title = $paramFetcher->get('title');
    if ($title) {
        $list = new TaskList();
        $preferences = new Preference();
        $preferences->setList($list);
        $list->setPreferences($preferences);
        $list->setTitle($title);
        $this->entityManager->persist($list);
        $this->entityManager->flush();
        return $this->view($list, Response::HTTP_CREATED);
    }
    return $this->view(['title' => 'This cannot be null'], Response::HTTP_BAD_REQUEST);
}
get操作在这里正常工作,它允许我从db获取所有列表

nelmio_cors.yaml
文件:

nelmio_cors:
    defaults:
        origin_regex: true
        allow_credentials: true
        allow_origin: ['%env(CORS_ALLOW_ORIGIN)%']
        allow_methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']
        allow_headers: ['Content-Type', 'Authorization', 'origin', 'Accept', 'bearer', 'Allow']
        expose_headers: ['Link']
        max_age: 3600
    paths:
        '^/': ~
正如您所看到的,POST方法是允许的

调试:路由器日志:

如图所示,该方法出现在预期方法和端点、注册和登录检查下,其中未指定使用POST正确工作的方法

网络错误:


在控制台中,我收到了CORS错误。

您正在发出
选项
请求(这是CORS的飞行前请求):

但我们的服务器清楚地告诉您,它只接受
GET
POST
请求:

您需要更改您的Web服务器配置(Apache、Nginx,无论您正在使用什么),以便它也接受
选项
请求

在某些情况下由浏览器自动发出,这解释了为什么某些端点工作,而不是此端点

看起来您正在使用内置的PHPWeb服务器,它的功能相当有限。我不知道有什么方法可以改变它的配置。您可以尝试在
127.0.0.1
上访问站点,而不是
localhost
,这有时会使浏览器对CORS请求更为宽松。

您可以尝试以下方法:

  • 确保apache标头模块通过以下方式激活:
    a2enmod headers
  • 要允许Web服务器接受选项(因为检查CORS需要它),请将其添加到
    .htaccess
    中,例如:
    标题添加访问控制允许方法“PUT、GET、POST、DELETE、OPTIONS”

  • 您需要确保服务器系统允许选项请求。这是与CORS配置不同的问题。如果您在Apache下运行php/symphony4设置,那么可能是Apache阻止了选项请求;如果是这样的话,请参阅上的答案,以获取有关如何使Apache允许选项请求的指导。Jake,看到下面的答案了吗?有什么反馈吗?我会反馈的,以后我现在就在工作了