Я работал над этой проблемой в течение многих дней. Я - разработчик, и мои знания этих вещей очень ограничены, все еще нет никого доступного в этой компании для помощи мне с этой проблемой. Это действительно должно быть разрешено, поскольку это получает блокирующуюся проблему.
Мы выполняем AS/400 с установкой Apache для развертывания сервисов REST. Я не знаю многих технических деталей, но информационных отчетов "Apache server <servername> - Apache/2.4.2 (IBM i)"
.
Проблемой является CORS: при использовании ПОМЕЩЕНИЯ/УДАЛЕНИЯ запрос ОПЦИЙ перед полетом, отправляют к серверу. Ответ возвращает a 200 OK
, но не возвращает заголовок CORS как Access-Control-Allow-Origin *
. Из-за этого (я принимаю) не выполняется реальный запрос, и браузер возвращает ошибку CORS:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Веб-сервисы настроены для возврата этого заголовка, но это не возможно к возвратам это для запроса ОПЦИЙ.
Я попытался настроить Apache, таким образом, он всегда возвращает этот заголовок, но он не работает. Неважно, который заголовок я добавляю, он не возвращается к браузеру.
Мой httpd.conf:
LoadModule mod_ibm_lwi /QSYS.LIB/QHTTPSVR.LIB/QLWIIHSMOD.SRVPGM
HotBackup Off
KeepAlive Off
DocumentRoot /www/WS_REST_BE/htdocs
AddLanguage en .en
LogMaint logs/error_log 7 0
LogFormat "%h %T %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Listen *:10043
<Location />
AllowOverride All
Require all granted
Header set Access-Control-Allow-Origin "*"
</Location>
LoadModule was_ap20_module /QSYS.LIB/QHTTPSVR.LIB/QSVTAP24.SRVPGM
WebSpherePluginConfig /www/WS_REST_BE/conf/ias-plugin-cfg.xml
<LwiProfile WS_REST_BE>
LwiAssignUserID WEBSBEPRD
LwiAutostartOption StartEnd
LwiStartJobQueue QHTTPSVR/QZHBHTTP HTTPWWW
</LwiProfile>
AddCharset UTF-8 .html .js
AddDefaultCharset utf-8
Я уже попытался установить заголовок в различных местах в конфигурации, но это просто не работает. В документации IBM ясно говорится, что mod_headers поддерживается (и это должно быть включено).
Я надеюсь, что кто-то здесь может вести меня к правильному направлению для решения этой проблемы.
Примечание: если я должен предоставить больше информации, не стесняйтесь спрашивать!
Я сам разрабатываю службы REST, но я реализовал заголовки CORS для ответа с помощью перехватчиков в JavaEE. В вашем сообщении об ошибке указано
Отсутствует заголовок Access-Control-Allow-Origin в запрошенном resource.
, который ссылается на запрос POST / DELETE afaik. Попробуйте добавить заголовки CORS к ответам POST / DELETE.
Насколько я понимаю, проблема должна быть не в Apache, а в службах REST. См. Также: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing#How_CORS_works
Хорошо, это предположение, но:
У вас есть директива Header
внутри
. Когда клиент отправляет предварительный запрос, он использует метод HTTP OPTIONS
. Поскольку OPTIONS
не запрашивает какой-либо конкретный ресурс, директива Location
может не активироваться.
Попробуйте переместить директиву Header
за пределы Location
.