允许工匠服务中的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' => '*'
添加到 Apache 配置中。
所以现在我可以在 localhost:8000 中运行我的服务器环境,在 localhost:9000 中运行我的前端,它们可以毫无问题地相互交谈。
【讨论】:
以上是关于允许工匠服务中的cors的主要内容,如果未能解决你的问题,请参考以下文章
application.properties 中的 web.cors.allowed-origins 不允许特定网址的 CORS
Cors - Firebase 云功能中的访问控制允许来源错误