Я работал над этим вопросом несколько дней. Я разработчик и мои познания в этих вещах очень ограничены, но в этой компании нет никого, кто мог бы помочь мне с этой проблемой. Это действительно нужно решить, так как возникает проблема с блокировкой.
Мы запускаем AS / 400 с установленным Apache для развертывания служб REST. Я не знаю многих технических деталей, но информация сообщает "Apache server <servername> - Apache/2.4.2 (IBM i)"
.
Проблема в CORS: при использовании PUT / DELETE на сервер отправляется предварительный запрос OPTIONS. Ответ возвращает 200 OK
, но не возвращает заголовок CORS, например Access-Control-Allow-Origin *
. Из-за этого (я предполагаю) реальный запрос не выполняется, и браузер возвращает ошибку CORS:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Веб-службы настроены на возврат этого заголовка, но невозможно вернуть его для запроса OPTIONS.
Я пытался настроить 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.
, который ссылается на запрос POST / DELETE afaik. Попробуйте добавить заголовки CORS к ответам POST / DELETE.
Насколько я понимаю, проблема должна быть не в Apache, а в службах REST. Смотрите также: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing#How_CORS_works