【发布时间】:2019-09-12 01:28:31
【问题描述】:
我的 Angular 应用程序的 CORS OPTIONS 预检请求一直存在问题。简而言之,我正在尝试实现一个简单的登录,它将一个 POST 请求发送到我的服务器,该服务器有一个使用 PHP\Slim 构建的后端,带有用户的凭据。 CORS OPTIONS 首先请求,我用 slim 处理它以响应 200 OK,所以当浏览器获得 OK 时,它最终会发送带有凭据的我的 POST,但随后它只是挂起......没有响应代码,什么都没有。
老实说,这让我大吃一惊,我猜我的请求服务有问题,因为这是唯一发送 OPTIONS 请求的服务。
疯狂的是,在我向登录按钮发送垃圾邮件后,它最终会屈服并做出响应。
I checked the network requests and this is the idea of what it looks like:
200 OPTIONS
POST
200 OPTIONS
POST
the posts are just blank
这是我的服务。
signin(user: User): Observable<Result> {
return this._http.post<Result>( this.base + this.signinURL, user )
.pipe(catchError(this.error));
}
private error(error: HttpErrorResponse) {
return throwError(error);
}
这里是CORS相关的路线
$app->options('/{routes:.+}', function (Request $request, Response $response, $args) {
return $response->withStatus(200);
});
$app->add(function (Request $req, Response $res, $next) {
$response = $next($req, $res);
return $response
->withHeader('Access-Control-Allow-Origin', 'http://localhost:4200')
->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization')
->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');
});
$app->map(['GET', 'POST', 'PUT', 'DELETE', 'PATCH'], '/{routes:.+}', function(Request $req, Response $res) {
$handler = $this->notFoundHandler;
return $handler($req, $res);
});
另外值得一提的是,我在 Angular CLI 服务器上运行前端,在 PHP Server v7.3 上运行 PHP。
如果有人可以向我解释发生了什么以及为什么我会高兴,谢谢你的想法...:)
【问题讨论】: