首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >domain.com已被CORS策略阻止:对印前检查请求的响应未通过访问控制检查:它没有HTTP ok状态

domain.com已被CORS策略阻止:对印前检查请求的响应未通过访问控制检查:它没有HTTP ok状态
EN

Stack Overflow用户
提问于 2021-07-06 15:17:26
回答 1查看 158关注 0票数 1

处理从React应用程序到Symfony的印前检查请求现在变得太难了,我正在尝试修复过去8小时的问题,这是我得到的错误,

Access to XMLHttpRequest at 'https://mylocaldomain.com/validate-token' from origin 'http://myreactapplocal:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

我尝试将这篇文章中的代码添加到here的public/index.php中,它起作用了,我正在尝试在侦听器中实现相同的代码,因为我不想编辑public/index.php,而且它不能通过侦听器工作,下面是我的侦听器代码

代码语言:javascript
运行
复制
namespace App\EventListener;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\KernelEvents;

class CorsListener implements EventSubscriberInterface
{


    private $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }

    public static function getSubscribedEvents(): array
    {
        return [
            RequestEvent::class => 'onRequestEvent',
            ResponseEvent::class => 'onResponseEvent',
        ];
    }


    public function onRequestEvent(RequestEvent $event)
    {
        if (HttpKernel::MASTER_REQUEST != $event->getRequestType()) {
            return;
        }

        $request = $event->getRequest();
        $method  = $request->getRealMethod();
        if ('OPTIONS' === $method) {
            $response = new Response();
            $response->headers->set('Access-Control-Allow-Headers', 'X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method,Access-Control-Request-Headers, Authorization');
            $event->setResponse($response);
        }
    }

    public function onResponseEvent(ResponseEvent $event)
    {
        // Don't do anything if it's not the master request.
        if (!$event->isMasterRequest()) {
            return;
        }
        $response = $event->getResponse();
        $response->headers->set('Access-Control-Allow-Origin', '*');
        $response->headers->set('Access-Control-Allow-Methods', 'GET,POST,PUT,OPTIONS,PATCH,DELETE');
        $response->headers->set('Access-Control-Allow-Headers', 'Content-Type,Authorization');
    }
}

任何类型的帮助/引导来解决这个问题是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2021-07-06 19:01:39

我在使用angular和symfony时也遇到了这个问题

对我来说,把下面的代码放在index.php上就解决了这个问题

代码语言:javascript
运行
复制
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: *");
header("Access-Control-Allow-Methods: *");
header("Allow: *");
$method = $_SERVER['REQUEST_METHOD'];
if ($method === "OPTIONS") {
    die();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68266124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档