Drupal 8 ma wbudowany rdzeń usługi internetowej RESTful, a od wersji 8.2 nie potrzebujemy modułu cors .
Teraz, aby korzystać z usług, po prostu włączamy i konfigurujemy plik default.service.yml, jak określono tutaj
Nie byłem jednak w stanie skonfigurować tego ustawienia, aby zezwolić na dostęp do usługi internetowej w innej domenie.
Moja obecna konfiguracja service.yml dla cors to:
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
Poszukałem go w celu znalezienia dalszej szczegółowej konfiguracji, ale nie mogłem go znaleźć.
Tworzę to do testowania rozwoju w dwóch różnych domenach.
Korzystanie ze środowiska deweloperskiego Panteon dla usług internetowych i niestandardowej domeny .dev dla lokalnego hosta do korzystania z tych usług.
Dostęp do usługi działa poprawnie dzięki rozszerzeniu chrome CORS.
źródło
Odpowiedzi:
Natknąłem się na to dość niedawno na Panteonie i mam nadzieję, że to pomoże, jeśli jeszcze tego nie rozwiązałeś.
Kilka rzeczy do zapamiętania ...
Jeśli chodzi o lokalizację pliku na Panteonie, upewnij się, że plik service.yml znajduje się w / sites / default vs. just / sites. Miałem błędne wrażenie, że zadziała z obu miejsc. Działa tylko, jeśli znajduje się w katalogu / sites / default.
Zwróć uwagę na oddzieloną przecinkami listę dozwolonych nagłówków, każdy w swoim własnym zestawie cytatów. Pierwotnie miałem jeden ciąg, jak ty w powyższym przykładzie, i zawiódł niezliczoną ilość razy, zanim zauważyłem subtelną różnicę. Jestem całkiem pewien, że dozwolone Metody działają w ten sam sposób, jeśli chcesz wymienić swoje metody.
Pamiętaj również, że chociaż mój fragment kodu będzie działał dobrze w programowaniu przeciwko piaskownicy Panteonu, prawdopodobnie zechcesz go nieco zablokować przed rozpoczęciem produkcji. Dzięki Pantheon oferującemu HTTPS będziesz również musiał upewnić się, że go użyjesz, jeśli zamierzasz przekazywać informacje przez nagłówki. Mam nadzieję, że to pomoże ci, jeśli nadal masz problemy, lub ktoś, kto natknął się na to w drodze.
źródło
Znajdź: ... / sites / default / default.services.yml
Utwórz kopię i zmień nazwę kopii na:
... / sites / default / services.yml
Znajdź tę część kodu: cors.config: enabled: false
i zamień na następujące - cors.config: włączone: prawda
Wyczyść pamięć podręczną.
źródło
Poniższe ustawienie działa dla mnie.
źródło
posedHeaders: true jest niepoprawny i spowoduje Ostrzeżenie: implode (): niepoprawne argumenty przekazane w Asm89 \ Stack \ CorsService-> addActualRequestHeaders () (wiersz 94 / vendor / asm89 / stack-cors / src / Asm89 / Stack / CorsService. php) # 0 /web/core/include/bootstrap.inc(584) To musi być false lub tablica z dozwolonymi nagłówkami do ujawnienia patrz https://developer.mozilla.org/en-US/docs/Web/ HTTP / Nagłówki / Kontrola dostępu-Ujawnij nagłówki
źródło