浏览器在Angular 4中发送'OPTIONS'请求而不是GET / POST

时间:2017-07-03 09:34:11

标签: javascript php laravel

浏览器正在API域请求中发送OPTIONS而不是GET/POST请求来跨域。我正在使用Laravel 5.4作为后端和前端我正在使用Angular 4

我在routeMiddleware中添加了Cors:

return $next($request)
       ->header('Access-Control-Allow-Origin', '*')
       ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');

api.php(路线):

Route::group(['middleware' => ['cors']], function(){
    Route::post('login', 'ApiController@login');
    Route::post('register', 'ApiController@register');
    Route::post('userInfo', 'ApiController@get_user_details');
});

可能的解决方案是什么?

1 个答案:

答案 0 :(得分:3)

浏览器总是发送OPTIONS请求,这实际上是一个安全测量的预检请求。当服务器理解此请求并以200代码响应时,浏览器将实际请求(使用实际方法GET,POST,...)发送到服务器。

您的服务器需要了解如何回复预检请求(使用OPTIONS方法的请求)。

您可以在此处找到如何在nodeJS服务器中实现此功能

module.exports = function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "*");
  res.header("Access-Control-Allow-Methods", "GET, POST", "PUT", "DELETE");

  next();
};