web-dev-qa-db-ja.com

「Access-Control-Allow-Origin」ヘッダーがない-Laravel 5.4

XMLHttpRequestが読み込めません http:// myapi/api/rating 。プリフライト要求への応答がアクセス制御チェックに合格しません:要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン ' http:// localhost:8104 'はアクセスを許可されません。応答のHTTPステータスコードは403でした。

CORSリクエストを作成できない理由がわかりません。ここにミドルウェアをインストールし、グローバルhttpカーネルに追加しましたが、それでも機能しません。 Stackoverflowの提案を踏まえてカスタムミドルウェアを作成しようとしましたが、それも機能しませんでした。ルートグループも追加してみました。最後に、リクエストアクションで手動で応答ヘッダーを設定してみました。私は本当に行き詰まっています-助けていただければ幸いです!

コードを参照してください: https://Gist.github.com/KerryRitter/0d7ababb7b9eb8d54f0ae55add9704a1

12
Kerry Ritter

Laravel 5.5Laravel 5.xを使用していて、No 'Access-Control-Allow-Origin' header is present on the requested resourceのような同じ問題に直面している場合。以下のパッケージを使用して、システムを構成してください。

ステップ1:

composer require barryvdh/laravel-cors

ステップ2

また、Cors\ServiceProviderプロバイダー配列にconfig/app.phpを追加する必要があります。

Barryvdh\Cors\ServiceProvider::class,

すべてのルートでCORSを許可するには、$middlewareクラスのapp/Http/Kernel.phpプロパティにHandleCorsミドルウェアを追加します。

グローバルに使用する場合:

protected $middleware = [
    // ...
    \Barryvdh\Cors\HandleCors::class,
];

ミドルウェア用:

protected $middlewareGroups = [
   'web' => [
       // ...
   ],

   'api' => [
        // ...
        \Barryvdh\Cors\HandleCors::class,
    ],
];

ステップ3

インストールが完了したら、以下のコマンドを実行してベンダーファイルを公開します。

php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider"

この答えが私と同じ問題に直面している誰かを助けることを願っています。

4
Rahul Hirve

https://github.com/barryvdh/laravel-cors

Laravel-corsパッケージを使用すると、Laravelミドルウェア構成でクロスオリジンリソースシェアリングヘッダーを送信できます。

特徴

CORSプリフライトOPTIONSリクエストを処理しますレスポンスにCORSヘッダーを追加します

3

私はlaravel= 5.4でこのエラーに直面しました。最近、自分のWebサイトにajaxポストリクエストを送信していましたが、これと同じエラーが発生しました。正確には2つの理由により、このエラーに直面しました。

error: XMLHttpRequest cannot load https://[mydomain].com/quote/short. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://[mydomain].com' is therefore not allowed access.

上記のエラーの理由は、httpsドメインからhttpドメインにリクエストを投稿していたため、httpsに変更するとエラーが解決され、同様の理由で同じエラーが発生しました時間、ドメインがあったwww.と私が追加した後、要求されたものはしませんでしたwww.両方に、それは魅力のように働きました。

そして、クロスオリジンリクエストの場合、私は次の解決策に慣れていました:

  1. 以下のコードを持つミドルウェア(私の場合はcors)を作成します

    return $next($request)
        ->header('Access-Control-Allow-Origin', '*')
        ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
    
  2. ミドルウェアをkernal.phpのrouteMiddleware配列に挿入します

    'cors' => \App\Http\Middleware\Cors::class,

  3. 尊敬されるルートにミドルウェアを追加する

    Route::get('myRoute', ['middleware' => 'cors' , 'uses'=> 'MyController@Action']

この答えが私と同じ問題に直面している誰かを助けることを願っています。

1
Talha Abrar

Laravelは、デフォルトでセキュリティの問題により、クロスオリジンリクエストを制限しています。異なるOriginからのリクエストを受け入れるために、Corsミドルウェアを作成する必要があります。

ステップ1:Corsミドルウェアを作成します。

php artisan make:middleware Cors

ステップ2:戻る前に、ハンドル関数に以下の行を追加します。

//header('Access-Control-Allow-Origin:  *');
header('Access-Control-Allow-Origin:  http://localhost:4200');
header('Access-Control-Allow-Headers:  Content-Type, X-Auth-Token, Authorization, Origin');
header('Access-Control-Allow-Methods:  POST, PUT');

ステップ3:ミドルウェアをapp/Http/Kernel.phpファイルに登録します。

Add below line in $middleware array 

\App\Http\Middleware\Cors::class,

ステップ4:ミドルウェアをapp/Http/Kernel.phpファイルで呼び出す必要があります

Add below line in $routeMiddleware array 

'cors' => \App\Http\Middleware\Cors::class,
0
Anubhav Tiwari

Corsミドルウェアクラスを作成し、kenel.phpのアプリケーションのグローバルHTTPミドルウェアスタックに追加できます。このスタックのミドルウェアは、アプリケーションへのすべてのリクエスト中に実行されます。そのスタックにミドルウェアを追加した後、それをapi.phpファイルで実行する必要はありません。詳細は this リンクをたどってください。

0

実際に必要なのは、アプリケーションにプロキシを追加することです(フロント)

{
    "/api/*": {
      "target": "http://localhost:8000",
      "secure": false,
      "logLevel": "debug"
    }
  }

そしてpackage.json

"scripts": {
"ng": "ng",
"start": "ng serve --proxy-config proxy.conf.json",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
}, 
... 

そして、あなたのプロジェクトを白く始めましょう

npm start

リンク: https://www.youtube.com/watch?v=OjmZPPKaj6A

0