首页 > 解决方案 > Laravel CORS 问题中的 XMLHttpRequest POST

问题描述

我在 Laravel 中遇到了 XMLHttpRequest POST 方法的问题,我尝试应用了几个参考,例如MyNotepaper和这个链接laravel-cors-fruitcakes但仍然没有用。

这是为了访问在线 API 数据并在 localhost 上调用。

这是我的卡住:

Reason: CORS header ‘Access-Control-Allow-Origin’ missing

这是我的代码:

var xhr = new XMLHttpRequest();
var url = 'https://xxx.yyyy.com/api/update';
var params = "server=server&password=12345";
xhr.open('POST', url, true);
xhr.setRequestHeader("Content-Type", "multipart/form-data");
xhr.setRequestHeader("Accept", "application/json");
        
xhr.onreadystatechange = function() {
     if(this.readyState == 4 && this.status == 200) {
           console.log(xhr.responseText);
     }
};

xhr.send(params);

对于 post 方法、URL 链接和与在 Postman 中显示数据的代码中相同的参数的信息,我不知道我忘记了哪一部分。

这是我的路线:

Route::get('/', function () {
   return view('welcome');
});

对于中间件设置,我在其 URL 链接参考中进行了尝试。

来自MyNotepaper这是我的中间件设置:

<?PHP

  namespace App\Http\Middleware;

  use Closure;

  class Cors
  {

  public function handle($request, Closure $next)
   {
     return $next($request)
     ->header('Access-Control-Allow-Origin', '*')
     ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, 
     DELETE, OPTIONS')
     ->header('Access-Control-Allow-Headers', 'Accept, Content-Type, 
     Authorization');
   }
  }

如果有人知道并且可以帮助我非常高兴和感激所有人

标签: laravelapipostxmlhttprequestcors

解决方案


将您的中间件放在其他中间件的顶部。

<?php

// file: app/Http/Kernel.php

protected $middleware = [
    \App\Http\Middleware\Cors::class,
    \App\Http\Middleware\TrustProxies::class,
    \Fruitcake\Cors\HandleCors::class,
    \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

我建议您使用来自barryvdh/laravel-cors.


推荐阅读