错误:laravel/VueJS ajax 请求中的 CORS

Posted

技术标签:

【中文标题】错误:laravel/VueJS ajax 请求中的 CORS【英文标题】:Error: CORS in laravel/VueJS ajax request 【发布时间】:2017-04-21 19:21:40 【问题描述】:

我在使用 VueJS 向我的 Laravel 应用程序发送 AJAX 请求时遇到了跨源问题。 我用 Laravel 5.3 编写了后端 API

【问题讨论】:

您需要在 API 中处理原始请求。你可以使用这样的东西:github.com/barryvdh/laravel-cors 在提问或至少在 Stack 的搜索之前,您应该始终使用 google。你至少会得到几个答案,而不会像很多人一样问同样的问题 【参考方案1】:

如果您向与页面所在域不同的域发送XMLHttpRequest,您的浏览器将阻止它,因为出于安全原因,它通常允许来自同一来源的请求。当您想要进行跨域请求时,您需要做一些不同的事情。 Using CORS 是一个关于如何实现的教程。

当您使用邮递员时,他们不受此政策的限制。引用自Cross-Origin XMLHttpRequest

常规网页可以使用 XMLHttpRequest 对象从远程服务器发送和接收数据,但它们受到同源策略的限制。扩展并没有那么有限。只要首先请求跨域权限,扩展程序就可以与其源之外的远程服务器通信。

要解决这个问题,您的外部 API 服务器必须通过设置以下标头来支持 cors 请求:

header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');

可以按照 cmets 中的建议由 laravel-cors 完成。

【讨论】:

【参考方案2】:

这是我使用的 Cors 中间件:

namespace App\Http\Middleware;

use Closure;

class CorsMiddleware

    public function handle($request, Closure $next)
    
        $headers = [
            'Access-Control-Allow-Origin'      => '*',
            'Access-Control-Allow-Methods'     => 'POST, GET, OPTIONS',
            'Access-Control-Allow-Credentials' => 'true',
            'Access-Control-Max-Age'           => '86400',
            'Access-Control-Allow-Headers'     => 'Content-Type, Authorization, X-Requested-With'
        ];

        if ($request->isMethod('OPTIONS')) 
            return response()->json('"method":"OPTIONS"', 200, $headers);
        

        $response = $next($request);
        foreach($headers as $key => $value) 
            $response->header($key, $value);
        

        return $response;
    

【讨论】:

谢谢!我更新了这个中间件并与我的 laravel 5.3 一起使用

以上是关于错误:laravel/VueJS ajax 请求中的 CORS的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel+vuejs 项目中允许 X-CSRF-TOKEN 吗?

使用 axios.put [laravel + vuejs 3] 更新模式内的数据时出现错误 422

Laravel 4.2 Vuejs

单击laravel vuejs中的按钮后如何隐藏bootstrap-vue模式

CORS 块 Laravel + VueJS Axios

403 从公共/图像文件夹 laravel vuejs xampp 加载图像时禁止