web-dev-qa-db-ja.com

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

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

サービスを使用するには、 here で指定されている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ドメインを使用します。

chrome CORS拡張機能を使用してサービスアクセスが正常に機能します。

12
sarathkm

私はパンテオンでこれにかなり最近遭遇しました、そしてうまくいけば、あなたがまだそれを解決していないなら、これが役立つでしょう。

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を使用する必要があります。これで問題が解決しない場合や、他の誰かが問題に遭遇した場合に役立つことを願っています。

16
Shawn Matthews

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

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

.../sites/default/services.yml

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

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

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

9
Soudip Paul

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

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
3
Aditya Joshi

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

0
Jagermonster