PHP 超薄框架 CORS
PHP Slimframework CORS
我在 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. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' 因此不允许访问。
伙计们,我做错了什么? :/
编辑:
忘记了后端URI的8080端口,现在加上了,新的错误是:
OPTIONS http://lvh.me:8080/api/partner net::ERR_CONNECTION_REFUSED
将以下内容添加到您的 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>
已通过 Skype 解决,将 Access-Control-Allow-Origin
、Access-Control-Allow-Methods
和 Access-Control-Allow-Headers
添加到 Slim 框架中间件。
我在 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. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' 因此不允许访问。
伙计们,我做错了什么? :/
编辑:
忘记了后端URI的8080端口,现在加上了,新的错误是:
OPTIONS http://lvh.me:8080/api/partner net::ERR_CONNECTION_REFUSED
将以下内容添加到您的 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>
已通过 Skype 解决,将 Access-Control-Allow-Origin
、Access-Control-Allow-Methods
和 Access-Control-Allow-Headers
添加到 Slim 框架中间件。