Як створити CORS?


12

Drupal 8 має вбудований сердечник RESTful, і з 8.2 нам не потрібен модуль cors .

Тепер для використання служб ми просто вмикаємо та налаштовуємо файл default.service.yml, як зазначено тут

Однак мені не вдалося налаштувати цю настройку, щоб дозволити доступ до веб-служб через інший домен.

Моя поточна настройка 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

Я погуглив знайти більш детальну конфігурацію щодо цього, але не зміг її знайти.

Я створюю це для розробки тестів у двох різних областях.

Використання середовища пантеон-розробників для веб-служб та customhost домен .dev для споживання цих послуг.

Доступ до сервісу працює добре за допомогою хромованого розширення CORS.


Якщо ви вже змінили свій сайт / default / services.yml, як було сказано в попередніх відповідях, і це не спрацювало, переконайтеся, що CORS увімкнено на вашому веб-сервері. Наприклад, у Nginx вам потрібно додати / змінити розташування в налаштуваннях блоку сервера, див. Https://enable-cors.org/server_nginx.html
Pin

Відповіді:


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 vs just / sites. Я неправильно мав враження, що це буде працювати з обох місць. Він працюватиме лише в каталозі / sites / default.

Зауважте список розділених комами дозволенихHeaders кожного у своєму наборі цитат. Спочатку я мав єдиний рядок, як ви, у своєму прикладі вище, і він незліченну кількість разів провалювався, перш ніж я зрозумів тонку різницю. Я досить впевнений, що дозволеноMethods працює так само, якщо ви спеціально хочете перерахувати свої методи.

Будь ласка, зауважте, що, хоча мій фрагмент коду буде добре працювати над розробкою проти пісочниці Pantheon, ви, швидше за все, захочете зафіксувати щось ще до початку виробництва. Завдяки Pantheon, що пропонує HTTPS, ви також захочете використовувати його, якщо ви збираєтеся передавати інформацію через заголовки. Сподіваємось, це допоможе вам або, якщо у вас все ще виникають проблеми, або хтось інший, який натрапив на нього по дорозі.


4
Навіщо вказувати дозволеніOrigins, а потім також передавати "*"?
Крістіан

Просто показати обидва варіанти. Будь ласка, пропустіть те чи інше.
Шон Меттьюз

Отримані читачі мають бути помилковими чи масивом, per drupal.org/project/drupal/isissue/2905848
Іван

Якщо когось цікавить, я не вірю, що поле дозволеного Оригіна приймає регулярний вираз. Я спробував використовувати шаблон регулярного вираження для створення білого списку кількох піддоменів, і drupal поскаржився. Довелося використовувати явний список доменів, розділених комами, як у цьому прикладі. Я сподівався, що це буде вести себе як налаштування надійних господарів у settings.php
Tony Stecca

9

Знайдіть: ... / sites / default / default.services.yml

Зробіть копію та перейменуйте її на:

... / сайти / за замовчуванням / services.yml

Знайдіть цю частину коду: cors.config: увімкнено: false

і замініть наступним - cors.config: увімкнено: true

Очистити кеш.


Я, напевно, намагався все, поки не побачив вашу відповідь, дякую, що показав найважливіший момент, який є ОЧИЩЕННЯ
emy

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

izpostavHeaders: true не вірно і викличе попередження: implode (): Неправильні аргументи, передані в Asm89 \ Stack \ CorsService-> addActualRequestHeaders () (рядок 94 / vendor / asm89 / stack-cors / src / Asm89 / Stack / CorsService php) # 0 /web/core/includes/bootstrap.inc(584) Це може бути помилковим або масивом з дозволеними заголовками, щоб відкрити, див. https://developer.mozilla.org/en-US/docs/Web/ HTTP / заголовки / контроль доступу-експозиція-заголовки

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.