CORSを設定するにはどうすればよいですか?


12

Drupal 8にはRESTful Webサービスがコアに組み込まれており、8.2以降、corsモジュールは必要ありません。

サービスを使用するために、ここで指定されているようにdefault.service.ymlファイルを有効にして設定します

ただし、別のドメインを介したWebサービスアクセスを許可するようにこの設定を構成することはできませんでした。

corsの現在のservice.yml設定は次のとおりです。

cors.config:
    enabled: true
    # Specify allowed headers, like 'x-allowed-header'.
    allowedHeaders: ['x-csrf-token,authorization,content-type,accept,origin,x-requested-with']
    # Specify allowed request methods, specify ['*'] to allow all possible ones.
    allowedMethods: ['POST, GET, OPTIONS, DELETE, PUT']
    # Configure requests allowed from specific origins.
    allowedOrigins: ['*']
    # Sets the Access-Control-Expose-Headers header.
    exposedHeaders: false
    # Sets the Access-Control-Max-Age header.
    maxAge: 1000
    # Sets the Access-Control-Allow-Credentials header.
    supportsCredentials: false

私はこれについてさらに詳細な設定を探しましたが、見つかりませんでした。

これは、2つの異なるドメインにわたるテスト開発用に作成しています。

Webサービスにはpantheon開発環境を使用し、それらのサービスを使用するにはlocalhostカスタム.devドメインを使用します。

クロムCORS拡張機能を使用して、サービスアクセスは正常に機能しています。


以前の回答で述べたようにすでにsite / default / services.ymlを変更していて、それが機能しない場合は、WebサーバーでCORSが有効になっていることを確認してください。たとえば、nginxの中であなたが追加する/を参照してください。サーバのブロックconfigurantionに場所を変更したhttps://enable-cors.org/server_nginx.htmlを
ピン

回答:


16

私は最近パンテオンでこれに遭遇しましたが、うまくいけば、まだ解決していない場合に役立ちます。

cors.config:
    enabled: true
    # Specify allowed headers, like 'x-allowed-header'.
    allowedHeaders: ['x-csrf-token','authorization','content-type','accept','origin','x-requested-with', 'access-control-allow-origin','x-allowed-header','*']
    # Specify allowed request methods, specify ['*'] to allow all possible ones.
    allowedMethods: ['*']
    # Configure requests allowed from specific origins.
    allowedOrigins: ['http://localhost/','http://localhost:3000','http://localhost:3001','http://localhost:3002','*']
    # Sets the Access-Control-Expose-Headers header.
    exposedHeaders: false
    # Sets the Access-Control-Max-Age header.
    maxAge: false
    # Sets the Access-Control-Allow-Credentials header.
    supportsCredentials: true

注意すべきいくつかの事柄...

Pantheon上のファイルの場所については、service.ymlファイルが/ sites / defaultではなく/ sitesにあることを確認してください。私はそれが両方の場所で機能するだろうという印象を誤っていました。/ sites / defaultディレクトリにある場合にのみ機能します。

それぞれ独自の引用符で囲まれたallowedHeadersのコンマ区切りリストに注意してください。私は最初、上の例のように単一の文字列を持っていましたが、微妙な違いを見つけるまでに何度も失敗しました。メソッドを具体的にリストしたい場合は、allowedMethodsが同じように機能することは間違いありません。

また、私のコードスニペットはPantheonサンドボックスに対する開発に適していますが、本番環境に移行する前に、もう少しロックダウンすることをお勧めします。パンテオンを提供するHTTPSでは、ヘッダーを介して情報を渡す場合も、HTTPSを使用する必要があります。これで問題が解決しない場合や、他の誰かが問題に遭遇した場合に役立つことを願っています。


4
なぜallowedOriginsを指定してから '*'も渡すのですか?
クリスチャン、

単に両方のオプションを表示します。どちらかを省略してもかまいません。
Shawn Matthews

exposedHeadersは、drupal.org
John

誰かに興味があれば、allowedOriginsフィールドが正規表現を受け入れるとは思えません。正規表現パターンを使用して複数のサブドメインをホワイトリストに登録しようとしたところ、drupalが不満を言いました。この例のように、コンマ区切りのドメインの明示的なリストを使用する必要がありました。私はそれがsettings.phpのtrusted-hosts設定のように動作することを望んでいました
Tony Stecca '

9

検索:... / sites / default / default.services.yml

コピーを作成し、コピーの名前を次のように変更します。

... / sites / default / services.yml

コードのこの部分を見つけます:cors.config:enabled:false

そして、以下と置き換えます-cors.config:enabled:true

キャッシュをクリアします。


私はあなたの答えが見つかるまですべてを試してみましたが、キャッシュのクリア(再構築されたキャッシュ)である最も重要なポイントを示してくれてありがとう:D
エミー

3

次の設定は私のために働いています。

cors.config:
  enabled: true
  # Specify allowed headers, like 'x-allowed-header'.
  allowedHeaders: ['x-csrf-token','authorization','content-type','accept','origin','x-requested-with']
  # Specify allowed request methods, specify ['*'] to allow all possible ones.
  allowedMethods: ['*']
  # Configure requests allowed from specific origins.
  allowedOrigins: ['*']
  # Sets the Access-Control-Expose-Headers header.
  exposedHeaders: false
  # Sets the Access-Control-Max-Age header.
  maxAge: false
  # Sets the Access-Control-Allow-Credentials header.
  supportsCredentials: false

0

exposedHeaders:trueは無効であり、警告が発生します:implode():Asm89 \ Stack \ CorsService-> addActualRequestHeaders()で渡された無効な引数(/ vendor / asm89 / stack-cors / src / Asm89 / Stack / CorsServiceの94行目)。 php)#0 /web/core/includes/bootstrap.inc(584)https://developer.mozilla.org/en-US/docs/Web/を参照するには、falseにするか、ヘッダーを許可した配列にする必要があります。 HTTP / Headers / Access-Control-Expose-Headers

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.