带有symfony的CORS Api

Dan*_*lci 5 cross-domain cors symfony symfony-2.1

我应该使用Symfony制作跨域API。有捆绑吗?

我尝试过FOS Rest Bundle,但似乎没有解决我的问题。

jua*_*iza 12

Symfony 5在文件中使用的这段代码public/index.php工作得很好。

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
header("Allow: GET, POST, OPTIONS, PUT, DELETE");
$method = $_SERVER['REQUEST_METHOD'];
if ($method == "OPTIONS") {
    die();
}
Run Code Online (Sandbox Code Playgroud)

另外,我删除了包cors..这个包对我不起作用

  • 使用“Access-Control-Allow-Origin: *”您将禁用 CORS 检查。维基百科引用:如果站点指定标头“Access-Control-Allow-Credentials:*”,则第三方站点可能能够执行特权操作并检索敏感信息。即使没有,攻击者也可能能够通过用户浏览器进行代理来绕过任何基于 IP 的访问控制。 (4认同)
  • 天才。我在 Nelmio cors 包中遇到了同样的问题,没有添加标题,这为我解决了这个问题! (3认同)
  • 您在代码的什么位置插入这些行?我尝试过很多职位,但都不适合我。谢谢。 (2认同)

Ale*_*eri 8

我建议您使用NelmioCorsBundle:

https://github.com/nelmio/NelmioCorsBundle

此捆绑包使您可以使用ACL样式的每个URL配置发送跨域资源共享标头。

对于CORS问题非常有用


WiR*_*ght 8

我不确定这是正确的方法,但我为我解决了:

  1. 创建新的事件订阅者(如ResponseSubscriber
  2. 监听KernelEvents::RESPONSE事件
  3. 在您的处理程序中添加以下内容:
if ($event->getRequest()->getMethod() === 'OPTIONS') {
    $event->setResponse(
            new Response('', 204, [
                'Access-Control-Allow-Origin' => '*',
                'Access-Control-Allow-Credentials' => 'true',
                'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE, OPTIONS',
                'Access-Control-Allow-Headers' => 'DNT, X-User-Token, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type',
                'Access-Control-Max-Age' => 1728000,
                'Content-Type' => 'text/plain charset=UTF-8',
                'Content-Length' => 0
            ])
        );
    return ;
}
Run Code Online (Sandbox Code Playgroud)