我在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
如您所见,主体以正常的{
字符开头,但随后又被另一个服务于text/html
的请求中的原始响应所覆盖。
响应也会发生同样的事情。不幸的是,我没有记录响应,所以我只有一张图像:
响应正文被不同的响应部分覆盖,只是这次第一个字符也被替换了。
我的堆栈是:
我有其他意见
据我所知,我的应用程序中没有任何可导致此类行为的“异常代码”。
我所拥有的唯一超出标准@Controller
范围的东西是一个RequestWrapper,它可以缓存请求主体以进行日志记录。它与org.springframework.web.util.ContentCachingRequestWrapper
完全相同,并且肯定无法访问响应。
P.S。看来this question大约是同一问题。
更新:Nginx日志证明了来自客户端的请求正常。