2

ドメインからAJAXリクエストを送信しようとしています:127.0.0.1:8000をlocalhost:8000に送信しています。Symfony Ajax同じ発信元ポリシー

を許可されていない405の方法Iは、原点の問題のために右のヘッダを送信しているリスナーを追加、持っている:この呼び出しは

ステータスコードで終了さ

<?php 

namespace AppBundle\Listener; 

use Symfony\Component\HttpKernel\Event\FilterResponseEvent; 

/** 
* Class CorsListener is handling on Kernel response header actions 
* @package AppBundle\Listener 
*/ 
class CorsListener { 
    public function onKernelResponse(FilterResponseEvent $event) { 
     $request = $event->getRequest(); 

     // allow this only for the tracking URL 
     /*if(strpos($request->getHost(), 'api.') === false) { 
      return; 
     }*/ 
     $event->getResponse()->headers->set('Access-Control-Allow-Headers', 'origin, content-type, accept'); 
     $event->getResponse()->headers->set('Access-Control-Allow-Origin', '*'); 
     $event->getResponse()->headers->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE OPTIONS'); 
    } 
} 

しかし、ヘッダーでさえ、あなたは下の画像で見ることができます、それは要求になることはできません。

いくつかお手伝いしますか?

enter image description here

+0

あなたのPHPコードは、OPTIONS要求のための明示的な取り扱いが必要です。 Access-Control-Allow-Methodsのresponse-headerの値に "OPTIONS"を入れるだけでは不十分です。ヘッダー値が持つ唯一の効果は、ブラウザーではクライアント側です。あなたが持っている問題はサーバー側であり、CORSヘッダーの設定とは無関係です。 OPTIONS要求を処理するための明示的なコードが必要です。そのコードは、あなたが既に設定したヘッダーを含む200 OK応答を送信するだけです(以下で説明するように、カンマが追加されていません)。 – sideshowbarker

+1

このhttps://github.com/nelmio/NelmioCorsBundleをお試しください。私はこれがSymfonyにとって最高の解決策だと思います。 – habibun

+0

NelmioCorsBundleは、セットアップがとても簡単です。 –

答えて

1

あなたは

$event->getResponse()->headers->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'); 

DELETEOPTIONS 2つの別々のメソッドであるべきコンマに

$event->getResponse()->headers->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE OPTIONS'); 

が欠けているように見えます。

+0

はい、これがポイントの1つです!ありがとう! –

0

私はsymfonyのコントローラーでOPTIONSメソッドを許可する必要がありました:

* @Method({"GET", "POST", "OPTIONS"}) 
+0

ところで:私は今私のサーバーに2つの要求を持っています。 1つはOPTIONS用、もう1つはPOST用です。これは正しいですか? –

関連する問題