WildFly 8.2 和 304 未修改
WildFly 8.2 and 304 Not Modified
RFC 2616 - "All 1xx (informational), 204 (no content), and 304 (not modified) responses MUST NOT include a message-body."
从 JBoss 5.1 升级到 WildFly 8.2 后,负载均衡器(使用 Netty 4.0 编写)出现故障。
原因 - WildFly 在 304 错误上发送带有 message-body 的响应:
<html><head><title>Error</title></head><body>Not Modified</body></html>
符合 RFC 2616 的 Netty 只读取 header 用于 304,但忽略非零 Content-Length 并在套接字中留下 body,因此我们在从同一通道第二次读取时出错.
我可以通过将 response.sendError(304) 更改为 response.setStatus(304) 来解决这个问题,但想知道是否可以将 WildFly 配置为不在 304 上发送 message-body未修改错误?
从技术上讲,2xx 和 3xx 不是 错误。只有 4xx 和 5xx 范围内的响应代码是错误(分别是客户端错误和服务器错误)。所以,我认为 setStatus
确实是正确的。
当您告诉服务器您正在发送一个错误,但不包括正文时,服务器本身包括一个错误。这是因为错误(4xx 和 5xx)有这个要求:
Except when responding to a HEAD request, the
server SHOULD send a representation containing an explanation of the
error situation, and whether it is a temporary or permanent
condition.
RFC 2616 - "All 1xx (informational), 204 (no content), and 304 (not modified) responses MUST NOT include a message-body."
从 JBoss 5.1 升级到 WildFly 8.2 后,负载均衡器(使用 Netty 4.0 编写)出现故障。
原因 - WildFly 在 304 错误上发送带有 message-body 的响应:
<html><head><title>Error</title></head><body>Not Modified</body></html>
符合 RFC 2616 的 Netty 只读取 header 用于 304,但忽略非零 Content-Length 并在套接字中留下 body,因此我们在从同一通道第二次读取时出错.
我可以通过将 response.sendError(304) 更改为 response.setStatus(304) 来解决这个问题,但想知道是否可以将 WildFly 配置为不在 304 上发送 message-body未修改错误?
从技术上讲,2xx 和 3xx 不是 错误。只有 4xx 和 5xx 范围内的响应代码是错误(分别是客户端错误和服务器错误)。所以,我认为 setStatus
确实是正确的。
当您告诉服务器您正在发送一个错误,但不包括正文时,服务器本身包括一个错误。这是因为错误(4xx 和 5xx)有这个要求:
Except when responding to a HEAD request, the server SHOULD send a representation containing an explanation of the error situation, and whether it is a temporary or permanent condition.