我对这个CORS的东西有点麻烦。在localhost:4200上运行Angular 4,而Slimframework在localhost:8080上运行。PHP Slimframework CORS
我的前端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,
我的设定数组。
浏览器的(铬)控制台说:
的XMLHttpRequest无法加载http://lvh.me/api/partner。对预检请求的响应不会通过访问控制检查:请求的资源上不存在“访问控制 - 允许来源”标头。因此不允许访问原产地'http://localhost:4200'。
我做错了什么,伙计们? :/
编辑:
忘记后端URI的8080端口,现在我补充说,新的错误是:
OPTIONS http://lvh.me:8080/api/partner net::ERR_CONNECTION_REFUSED
我的php有点生疏,但我想你必须添加''Access-Control-Allow-Origin:*')',不知道如何用你的框架做到这一点,也许通过'$ response-> withHeader ' – pregmatch
是的,我正在用' - > withHeader('Access-Control-Allow-Origin','*');'但没有任何反应。 – Hienz
你可以转储你从中间件获得的所有头文件吗?一些复制/粘贴。也许你的头被重写了一些你看不到的东西。发生在我身上的很多次。 – pregmatch