Рейтинг:0

«Множественное происхождение CORS не разрешено» — с использованием сервера синтаксического анализа и apache2

флаг gi

Я использую apache2 в качестве обратного прокси-сервера для моего сервера синтаксического анализа. Чтобы разрешить запросы Cross Origin, я изначально пытался установить:

Заголовок всегда устанавливает Access-Control-Allow-Origin "*"

в файле конфигурации apache вместе с:

ProxyPass /parse/ http://localhost:1337/parse/
ProxyPassReverse /parse/ http://localhost:1337/parse/
RewriteEngine включен
RewriteCond %{REQUEST_METHOD} ОПЦИИ
Правило перезаписи ^(.*)$ $1 [R=200,L]

После этого запросы были успешно перенаправлены с apache на мой сервер синтаксического анализа. Однако теперь мое веб-приложение выдает Множественное происхождение CORS не разрешено.

В консоли разработчика моего браузера я вижу, что этот параметр Access-Control-Allow-Origin установлен дважды.

введите описание изображения здесь

Я подтвердил, что второй экземпляр этого появляется из-за parse-server. Однако я не могу найти способ запретить parse-server или apache устанавливать этот параметр в ответе.

Я попытался изменить исходную строку в конфигурации apache на:

1.

Заголовок всегда установлен пустым Access-Control-Allow-Origin "*"
Заголовок всегда добавляйте Access-Control-Allow-Origin "*"
Заголовок всегда добавляйте Access-Control-Allow-Origin "*"
Заголовок всегда редактировать Access-Control-Allow-Origin "^$" "*"

Ни одна из этих попыток ничего не изменила. Однако удаление Access-Control-Allow-Origin Параметр в конфигурации apache предотвращает прохождение исходного запроса к серверу синтаксического анализа, поэтому это не вариант.

Я использую версию apache2 2.4.29 и парсер-сервер 4.10.3.

Кто-нибудь знает способ заставить это работать?

Рейтинг:2
флаг cn

Прежде всего, я думаю, важно немного разобраться в том, как работает CORS:

  • CORS проверяется браузером на стороне клиента.
  • Чтобы убедиться, что источник (другой домен, протокол или порт) имеет доступ к другому источнику, предполетный запрос может быть выдан до фактического запроса Cross-Origin. Этот запрос использует метод OPTIONS и должен содержать Контроль доступа заголовки в ответе.

Так почему я это говорю: я подозреваю, что причина, по которой вам нужно установить Access-Control-Allow-Origin заголовок в Apache для того, чтобы запрос «прошел», заключается в том, что ваша конфигурация Apache не проксирует ВАРИАНТ Запросы. Это приводит к тому, что браузер получает неожиданный ответ на предварительные запросы и выдает ошибку CORS еще до того, как попытается выполнить фактический запрос.

Поскольку CORS проверяется в браузере, обратный прокси-сервер Apache не должен играть в нем никакой роли.Когда ваш внутренний сервер (сервер синтаксического анализа) правильно настроен для обработки запросов CORS и отправляет правильные Контроль доступа-* заголовки все должно работать независимо от того, сколько прокси вы установили между ними. Это до тех пор, пока прокси-сервер пересылает все запросы.

В качестве альтернативы вы можете «наложить» конфигурацию CORS на обратный прокси-сервер, но здесь это кажется излишним. Поскольку вы видите два Access-Control-Allow-Origin заголовки в ответе, я подозреваю, что сервер синтаксического анализа на самом деле уже пытается обработать запрос CORS.

Я рекомендую вам сначала проверить конфигурацию Apache и убедиться, что ВАРИАНТ запросы перенаправляются на парсер-сервер. Если это не так, я бы посмотрел на запросы, которые браузер делает на вкладке сети инструментов разработчика:

  • Как выглядит предварительный запрос? Есть ли даже запрос перед полетом?
  • Удачно или нет, и с какой ошибкой?
  • Какие Контроль доступа-* заголовки ответа на запрос перед полетом?
  • Выпущен ли окончательный запрос? Каковы заголовки ответа на этот запрос?

Вы также можете отлаживать эти вещи, вызывая службы с помощью завиток путем установки заголовка источника.

curl -v -X PUT -H "Происхождение: https://example.com" https://www.example.org

Таким образом, вы можете моделировать запросы к серверной службе и видеть, какие заголовки она отправляет.

Рейтинг:0
флаг cn

В консоли разработчика моего браузера я вижу, что этот параметр Access-Control-Allow-Origin установлен дважды.

По поводу повторяющихся заголовков я ответил аналогичный вопрос недавно в списке рассылки.

Вы должны прочитать ссылка на конфигурацию для директивы Header внимательно, чтобы понять, что происходит. Смотрите вокруг следующего текста: "он не предлагает никакого «нормализованного» единого списка заголовков". По существу, как я понимаю, при успехе (по умолчанию) и всегда являются именами двух отдельных таблиц (списков) заголовков.

Попробуйте следующее:

Заголовок при успешном завершении сброса Access-Control-Allow-Origin
Заголовок всегда устанавливает Access-Control-Allow-Origin "*"
Vinoth Rc avatar
флаг fr
Набор заголовков Access-Control-Allow-Origin "*" работает

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.