Прежде всего, я думаю, важно немного разобраться в том, как работает 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
Таким образом, вы можете моделировать запросы к серверной службе и видеть, какие заголовки она отправляет.