【问题标题】:PHP Slimframework CORSPHP Slim 框架 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" =&gt; 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-&gt;withHeader
  • 是的,我正在尝试使用-&gt;withHeader('Access-Control-Allow-Origin', '*');,但没有任何反应..
  • 你能转储你从中间件获得的所有标题吗?一些复制/粘贴。也许你的标题被你看不到的东西重写了。发生在我身上很多次。
  • 我现在只用这个中间件,但如果你告诉我该怎么做,我会做的。
  • 在您的return this.http.post(this.regUrl, partner, options) 中是不是这个this.regUrl 某个您正在使用中间件处理并期望中间件响应的网址?

标签: php angular cors slim


【解决方案1】:

通过Skype解决,将Access-Control-Allow-OriginAccess-Control-Allow-MethodsAccess-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] &lt;IfModule mod_rewrite.c&gt; 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" &lt;/IfModule&gt; 我仍然收到错误消息。
    猜你喜欢
    • 2017-07-23
    • 2015-10-15
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2018-02-13
    • 2013-06-12
    • 1970-01-01
    • 2014-09-10
    相关资源
    最近更新 更多