允许工匠服务中的cors

Posted

技术标签:

【中文标题】允许工匠服务中的cors【英文标题】:Allowing cors in artisan serve 【发布时间】:2014-01-14 12:58:11 【问题描述】:

现在在开始学习 Angularjs 和 Laravel 4 之后,我非常喜欢这样一种方式,即只需一个终端命令就可以设置一个工作开发服务器,而无需设置虚拟主机或类似的东西。

不过……

我想单独开发我的前端,这样我就可以利用 yeoman 和 gruntjs 的美妙组合,因为如果我把所有东西都放在 laravel 公共文件夹中(或者至少我不知道怎么做),我真的不能这样做给我留下以下情况:

我在 localhost:9000 有一个前端 grunt 服务器

我在 localhost:8000 有一个 laravel 4 服务器

这当然意味着为了让 Angularjs 与 Laravel 通信,我必须允许 CORS。在 Apache 中这很简单:只需将 Header add Access-Control-Allow-Origin "localhost:9000" 添加到 httpd.conf 的目录部分,就可以让这个 url 与 localhost 通信。

现在我应该把这个 cors 配置放在哪里? 工匠,如果可能的话?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。您可以在config/cors.php 中找到 cors 配置。默认情况下,仅api/* 路由允许所有来源。您可以添加自己的路线(例如oauth),如下所示:

'path' => ['api/*', 'oauth/*']

【讨论】:

【参考方案2】:

好吧,找到了至少一个对我有用的答案。由于我专注于 Apache 而不是 Laravel 本身,因此我似乎从错误的方向解决了这个问题。

为了允许通过 artisan 在开发环境中进行跨域响应,应将以下代码插入 filters.php

<?php
...
App::before(function($request)

    if($_SERVER['REQUEST_METHOD'] === 'OPTIONS') 
            $statusCode = 204;

            $headers = [
                'Access-Control-Allow-Origin'      => '*',
                'Access-Control-Allow-Methods'     => 'GET, POST, OPTIONS',
                'Access-Control-Allow-Headers'     => 'Origin, Content-Type, Accept, Authorization, X-Requested-With',
                'Access-Control-Allow-Credentials' => 'true'
            ];

            return Response::make(null, $statusCode, $headers);
        
);


App::after(function($request, $response)

    $response->headers->set('Access-Control-Allow-Origin', '*');
        $response->headers->set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
        $response->headers->set('Access-Control-Allow-Headers', 'Origin, Content-Type, Accept, Authorization, X-Requested-With');
        $response->headers->set('Access-Control-Allow-Credentials', 'true');
        return $response;
);
...

如果相关的话,我还将'Access-Control-Allow-Origin' =&gt; '*' 添加到 Apache 配置中。

所以现在我可以在 localhost:8000 中运行我的服务器环境,在 localhost:9000 中运行我的前端,它们可以毫无问题地相互交谈。

【讨论】:

以上是关于允许工匠服务中的cors的主要内容,如果未能解决你的问题,请参考以下文章

离子4中的Cors问题

application.properties 中的 web.cors.allowed-origins 不允许特定网址的 CORS

Cors - Firebase 云功能中的访问控制允许来源错误

ZF2中的CORS POST请求变成OPTIONS请求

Egg 中通过 Egg-cors 配置服务器端允许跨域以及 Cookie 允许跨域

Egg 中通过 Egg-cors 配置服务器端允许跨域以及 Cookie 允许跨域