CORS'u nasıl kurarım?


12

Drupal 8, dahili RESTful web servisine sahiptir ve 8.2'den beri cors modülüne ihtiyacımız yok .

Şimdi hizmetleri kullanmak için, burada belirtildiği gibi default.service.yml dosyasını etkinleştirip yapılandırıyoruz

Ancak, bu kurulumu başka bir etki alanı üzerinden web hizmeti erişimine izin verecek şekilde yapılandıramadım.

Benim cors için geçerli service.yml kurulumu:

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

Bu konuda daha ayrıntılı yapılandırma bulmak için googled ama bir tane bulamadım.

Bunu iki farklı alanda test geliştirme için oluşturuyorum.

Web hizmetleri için pantheon dev ortamını ve bu hizmetleri tüketmek için localhost özel .dev etki alanını kullanma.

Krom CORS eklentisi kullanılarak servis erişimi iyi çalışıyor.


Sitenizi / default / services.yml dosyasını önceki yanıtlarda belirtildiği gibi değiştirdiyseniz ve Çalışmadıysa, web sunucunuzda CORS'un etkinleştirildiğinden emin olun. Örneğin, Nginx içinde eklemek / modifiye bir konum sunucu blok configurantion sahip bakınız https://enable-cors.org/server_nginx.html
Pim

Yanıtlar:


16

Bunu son zamanlarda Pantheon'da gördüm ve umarım bu henüz çözmediyseniz yardımcı olur.

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

Unutulmaması gereken birkaç nokta ...

Pantheon'daki dosyanın konumu ile ilgili olarak, lütfen service.yml dosyanızın / sites / default / just / sites konumunda olduğundan emin olun. Yanlışlıkla her iki yerden de çalışacağı izlenimi altındaydım. Yalnızca / sites / default dizinindeyse çalışır.

Her birinin kendi tırnak kümesinde virgülle ayrılmış allowedHeaders listesine dikkat edin. Aslında yukarıdaki örnekte yaptığınız gibi tek bir dize vardı ve ince farkı yakalamadan önce sayısız kez başarısız oldu. Özellikle yöntemlerinizi listelemek istiyorsanız, izin verilen yöntemlerin aynı şekilde çalıştığından eminim.

Ayrıca, kod snippet'imin bir Pantheon sanal alanına karşı geliştirme için iyi çalışmasına rağmen, üretime başlamadan önce işleri biraz daha kilitlemek isteyeceğinizi lütfen unutmayın. Pantheon HTTPS sunarken, bilgileri başlıklardan geçirecekseniz de kullanmak istersiniz. Umarım hala sorun yaşıyorsanız ya da yolda tökezleyen başka biri size yardımcı olur.


4
Neden allowedOrigins'i belirtin ve ardından '*' iletin?
Christian

Her iki seçeneği de göstermek yeterlidir. Lütfen birini veya diğerini atlamaktan çekinmeyin.
Shawn Matthews


Herkes ilgileniyorsa, allowedOrigins alanının normal ifadeyi kabul ettiğine inanmıyorum. Birden fazla alt alan adını beyaz listeye eklemek için normal ifade desenini denedim ve drupal şikayet etti. Bu örnekteki gibi, virgülle ayrılmış alan adlarının açık bir listesini kullanmak zorunda kaldım. Settings.php'deki güvenilir ana bilgisayarlar ayarı gibi davranacağını umuyordum
Tony Stecca

9

Bul: ... / sites / default / default.services.yml

Bir kopya oluşturun ve kopyayı şu şekilde yeniden adlandırın:

... / siteler / default / services.yml

Kodun bu bölümünü bulun: cors.config: enabled: false

ve aşağıdakilerle değiştirin - cors.config: enabled: true

Önbelleği temizleyin.


Cevabınızı görünceye kadar her şeyi denedim, CACHE'Yİ TEMİZLEME (REBUILD CACHE): D
emy

3

Aşağıdaki ayar benim için çalışıyor.

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 geçerli değil ve neden olacak Uyarı: implode (): Asm89 \ Stack \ CorsService-> addActualRequestHeaders () (94 numaralı satır / vendor / asm89 / stack-cors / src / Asm89 / Stack / CorsService öğesine iletildi. pHP) # 0 /web/core/includes/bootstrap.inc(584) ya yanlış veya bkz maruz bırakıldı başlıkları içeren bir dizi olması gerekmektedir https://developer.mozilla.org/en-US/docs/Web/ HTTP / Başlıkları / Erişim Kontrol-Açığa-Başlıkları

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.