我正在使用 Payara 服务器托管一些应用程序。 在我正在使用的 DEV 服务器上
5.201 #badassfish(build 512)(社区)
在我正在运行的 PROD 服务器上
Payara Server Enterprise 5.31.0 #badassfish(内部版本 4356)
在 HttpServlet 中运行以下代码时
@Override protected void doGet(final HttpServletRequest pReq, final HttpServletResponse pResp) throws ServletException, IOException {
pReq.sendError(400, "LDAP credentials invalid!");
}
然后我的开发服务器返回 HTTP 状态码
400 LDAP 凭据无效!
而 PROD 只返回
400
缺少实际消息
LDAP credentials invalid!
。
我可以在配置文件或代码中调整任何设置,以便我的 Payara PROD 实际上正确地传递消息吗?
HTTP/1.1 400 LDAP credentials invalid!
,HTTP/1.1 400
)刚刚发现,如果我通过 HTTP(禁用“安全”的 HTTP 侦听器,在不同的端口上)寻址 PROD 服务器,它会正确返回整个消息:
HTTP/1.1 400 LDAP credentials invalid!
.
所以问题只存在于通过 HTTPS(启用“安全”的 HTTP 侦听器)访问时。
我会进一步深入研究,玩“安全”开关。
是的。确认的。在生产时:
https://
更改为 http://
,反之亦然400 LDAP credentials invalid!
)400
现在我会在社区版上检查同样的现象......
我检查了社区版的行为:社区版按预期工作,两次都返回完整消息。显式:
400 LDAP credentials invalid!
)400 LDAP credentials invalid!
)
(我也尝试过交换侦听器配置,也 100% 正常工作)现在我不知道这是否与版本差异有关,
将继续检查并相应地更新此问题。
Payara Server 有一个名为
sendError_1
, ... ,sendError_N
的属性,可用于自定义发生错误时服务器发送的响应。要将服务器配置为仅发送 HTTP 状态代码,您可以将属性值设置为空字符串。该设置可以应用于 postbootasadmin
文件中的虚拟服务器或通过创建虚拟服务器:
set "configs.config.server-config.http-service.virtual-server.server.property.send-error_1=code=400 path=/tmp/400.html reason="
set "configs.config.server-config.http-service.virtual-server.server.property.send-error_2=code=404 path=/tmp/404.html reason=NOT_FOUND"
本例中虚拟服务器的名称为server。通过启动服务器,它将在服务器日志的开头打印:
Created virtual server server
但在您的情况下,在生产中它可能只是更改请求的反向代理。