java - WildFly 8.2 和 304 未修改

标签 java http jboss wildfly

RFC 2616 -“所有 1xx(信息)、204(无内容)和 304(未修改)响应不得包含消息正文。”

从 JBoss 5.1 升级到 WildFly 8.2 后,负载均衡器(使用 Netty 4.0 编写)出现故障。

原因 - WildFly 在 304 错误时发送带有消息正文的响应:

<html><head><title>Error</title></head><body>Not Modified</body></html>

根据 RFC 2616 的 Netty 只读取 304 的 header ,但忽略不为零的 Content-Length 和套接字中的左主体,因此我们在从同一 channel 第二次读取时出错。

我可以通过将 response.sendError(304) 更改为 response.setStatus(304) 来解决这个问题,但我想知道,是否可以将 WildFly 配置为在出现 304 Not Modified 错误时不发送消息正文?

最佳答案

从技术上讲,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.

关于java - WildFly 8.2 和 304 未修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31290891/

相关文章:

java - 由于图像上传导致的 JBoss 堆空间问题

java - 在 jfilechooser 中包含图像缩略图

java - 为什么 FindBugs 会忽略我的 null 检查?

java - 从用户邮箱生成代码生成链接然后发送

java - XFire SOAP 服务器可以向客户端发送 HTTP 301 REDIRECT 吗?

javascript - http.createServer on ('request' ) async/await 函数

linux - Jboss未安装

AngularJs、Jboss 和 JAAS

java - 如何从android中的嵌套对象访问setter?

php - 如何让 PHP 正确地对数字索引数组进行 URL 编码?