PHP Slim 框架 CORS
Posted
技术标签:
【中文标题】PHP Slim 框架 CORS【英文标题】:PHP Slimframework CORS 【发布时间】:2017-12-12 18:25:31 【问题描述】:我对这个 CORS 的事情有点麻烦。 Angular 4 在 localhost:4200 上运行,而 Slimframework 在 localhost:8080 上运行。
我的前端 HTTP 请求:
....
createPartner(partner: Partner): Observable<Partner>
let headers = new Headers( 'Content-Type' : 'application/json');
let options = new RequestOptions( headers: headers );
return this.http.post(this.regUrl, partner, options)
.map((res: Response) =>
return res.json();
)
.catch(this.handleError);
....
我的中间件:
....
$app->add(function($request, $response, $next)
$route = $request->getAttribute("route");
$methods = [];
if (!empty($route))
$pattern = $route->getPattern();
foreach ($this->router->getRoutes() as $route)
if ($pattern === $route->getPattern())
$methods = array_merge_recursive($methods, $route->getMethods());
else
$methods[] = $request->getMethod();
$response = $next($request, $response);
return $response->withHeader("Access-Control-Allow-Methods", implode(",", $methods));
);
我将"determineRouteBeforeAppMiddleware" => true,
添加到我的设置数组中。
浏览器的 (chrome) 控制台显示:
XMLHttpRequest 无法加载 http://lvh.me/api/partner。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost:4200' 因此不允许访问。
我做错了什么,伙计们? :/
编辑:
忘记了后端URI的8080端口,现在我添加了,新的错误是:
OPTIONS http://lvh.me:8080/api/partner net::ERR_CONNECTION_REFUSED
【问题讨论】:
我的 php 有点生锈,但我想你必须添加'Access-Control-Allow-Origin: *')
,不知道如何使用你的框架来做到这一点,也许通过 $response->withHeader
是的,我正在尝试使用->withHeader('Access-Control-Allow-Origin', '*');
,但没有任何反应..
你能转储你从中间件获得的所有标题吗?一些复制/粘贴。也许你的标题被你看不到的东西重写了。发生在我身上很多次。
我现在只用这个中间件,但如果你告诉我该怎么做,我会做的。
在您的return this.http.post(this.regUrl, partner, options)
中是不是这个this.regUrl
某个您正在使用中间件处理并期望中间件响应的网址?
【参考方案1】:
通过Skype解决,将Access-Control-Allow-Origin
、Access-Control-Allow-Methods
和Access-Control-Allow-Headers
添加到Slim框架中间件。
【讨论】:
【参考方案2】:将以下内容添加到您的 htaccess 以允许 cors,
<IfModule mod_rewrite.c>
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
Header add Access-Control-Allow-Headers: "Content-Type"
RewriteEngine on
RewriteBase /
</IfModule>
来源:https://gist.github.com/maxparm/3105526
【讨论】:
我也尝试过这种简单的解决方案,但没有奏效。 这个答案只适用于他使用Apache的情况。 我的 .htaccess:RewriteEngine On RewriteCond %REQUEST_FILENAME !-f RewriteRule ^ index.php [QSA,L] <IfModule mod_rewrite.c> Header add Access-Control-Allow-Origin "*" Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT" Header add Access-Control-Allow-Headers: "Content-Type" </IfModule>
我仍然收到错误消息。以上是关于PHP Slim 框架 CORS的主要内容,如果未能解决你的问题,请参考以下文章