java - Wildfly 中奇怪的请求/响应机构?
问题描述
我在 Wildfly 中运行的应用程序中遇到了涉及请求/响应主体的奇怪问题。在我看来,某处的缓冲区正在由服务不同请求的多个线程共享。
应该是来自我的应用程序的 JSON 的请求正文示例:
{TTP/1.0 200 OK
Expires: 0
Cache-Control: max-age=7200
X-Powered-By: Undertow/1
Server: WildFly/10
X-XSS-Protection: 1; mode=block
Pragma:
X-Frame-Options: DENY
Accept-Ranges: bytes
Date: Fri, 07 Dec 2018 06:32:15 GMT
Connection: close
Last-Modified: Fri, 30 Nov 2018 17:08:34 GMT
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 570
Content-Type: text/html; charset=UTF-8
"-","appliedMethods":[{"uuid":"ebe163d3-c14c-4664-96a1-de8be17d462b","method":{"guid":"631e552a-e86e-44dc-8f2f-14e5b9bafa63", ... normal JSON continues
如您所见,正文以普通字符开头,但随后被另一个请求提供的原始响应{
的一部分覆盖some 。text/html
响应也会发生同样的事情。不幸的是,我没有记录响应,所以我只有一张图片:
响应正文被不同的响应部分覆盖,只是这次第一个字符也被替换了。
我的堆栈是:
- 客户端 - angularjs 1.6.6
- Nginx - nginx-plus-r14-p1 (1.13.7)
- Wildfly - 10.1.0.Final
- 春天 - 4.2.4.RELEASE
我的其他观察:
- 我只能通过请求来衡量案例,但这个问题的出现率极低:我目前记录的 37 806 125 条消息中有 57 条案例。
- angularjs 似乎不会导致这种情况,因为:
- 我对 1.4 有同样的问题。
- 我很确定当请求被覆盖时,它被覆盖的那部分属于来自另一个客户端的请求。由于该客户端无法获得此数据,因此它必须进一步发生。
据我所知,我的应用程序中没有任何可能导致此类行为的“异常代码”。
唯一超出标准范围的@Controller
东西是 RequestWrapper 缓存请求主体以进行日志记录。它几乎等同于org.springframework.web.util.ContentCachingRequestWrapper
并且肯定无法获得响应。
PS看起来这个问题是关于同一个问题。
更新:Nginx 日志证明请求来自客户端是正常的。
解决方案
推荐阅读
- c++ - OpenMP 与有序指令和关键指令并行
- ios - 停留在指南 5.1.1 - 法律 - 隐私 - 数据收集和存储
- c - 在具有类型成员的结构定义处编译错误,指向 C 中的结构数组的指针
- javascript - 当用户向上滚动时显示新的更新按钮
- c# - 使用 RichTextBox 显示格式不正确的字符串
- python - 在 jupyter notebook 上安装 keras 和 tensorflow 时出错
- python - pyqt5 从父窗口关闭子窗口
- node.js - 将标头发送到客户端后无法设置标头 - 但代码不应运行
- c++ - 使用一个循环与两个循环
- python - 如何在 Matplotlib 上的时间序列图中显示日期