【问题标题】:Browser sending 'OPTIONS' request instead of GET/POST in Angular 4 [duplicate]浏览器在Angular 4中发送'OPTIONS'请求而不是GET / POST [重复]
【发布时间】:2017-12-06 12:34:29
【问题描述】:

浏览器正在向跨域发送 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');
});

可能的解决方案是什么?

【问题讨论】:

    标签: javascript php laravel


    【解决方案1】:

    浏览器总是发送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();
    };
    

    【讨论】:

    • 也就是说,如果您可以编辑服务器的响应以发送合适的 CORS 响应,但许多服务器您将没有这个机会 - 那么在这种情况下您会怎么做 - 假设您使用的是 Angular Front end - 类似于问题
    猜你喜欢
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2018-10-29
    • 2017-03-22
    • 1970-01-01
    • 2012-08-17
    • 2018-09-04
    相关资源
    最近更新 更多