Apache 中未添加 CORS 标头

Apache 中未添加 CORS 标头

我已经处理这个问题好几天了。我是一名开发人员,我对这些事情的了解非常有限,但这家公司仍然没有人可以帮助我解决这个问题。这个问题确实必须解决,因为它正在成为一个阻塞问题。

我们正在运行带有 Apache 安装的 AS/400 来部署 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.

Web 服务已配置为返回此标头,但无法为 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 受支持(并且应该启用)。

我希望这里有人可以指导我找到正确的方向来解决这个问题。

注意:如果我需要提供更多信息,请随时询问!

答案1

我自己开发 REST 服务,但我使用 JavaEE 中的拦截器将 CORS 标头实现到响应中。您的错误消息指出

所请求的资源上不存在“Access-Control-Allow-Origin”标头。

,据我所知,它引用了 POST/DELETE 请求。尝试将 CORS 标头添加到 POST/DELETE 答案中。

请参阅参考:http://www.developerscrappad.com/1781/java/java-ee/rest-jax-rs/java-ee-7-jax-rs-2-0-cors-on-rest-how-to-make-rest-apis-accessible-from-a-different-domain

据我了解,问题不应该出在 Apache 上,而应该出在 REST 服务上。另请参阅:https://en.wikipedia.org/wiki/Cross-origin_resource_sharing#How_CORS_works

答案2

好的,这只是猜测,但是:

您的Header指令位于 内<Location /> ... </Location>。当客户端发送预检请求时,它使用 HTTPOPTIONS方法。由于OPTIONS不请求任何特定资源,因此该Location指令可能无法激活。

尝试将您的Header指令移到 之外Location

相关内容