我和我的团队很难解决一个奇怪的错误。
我们的设置: 一些网络设备(硬和软)背后的Spring Boot API,包括Squid代理
在某些携带数据的传入请求(POST
和PUT
)上,Spring引发以下异常:
org.springframework.http.converter.HttpMessageNotReadableException: 读取输入消息时发生I / O错误;嵌套异常为 java.io.IOException:java.util.concurrent.TimeoutException:空闲 超时到期:30000/30000毫秒
这使我们感到服务器希望消息结束,但是较低层的网络层中的某些内容阻止它检索消息,然后使消息“空闲超时”
HTTP请求通过LTE移动连接(200 OK)从同一台计算机传递,但没有通过WiFi或有线公司连接传递。
在网络设备上玩MTU会对行为产生影响。 Connection
HTTP标头也是如此。但是,由于我们不了解“引擎盖下”会发生什么,因此我们不知道如何正确调整它们,也找不到任何令人满意的配置。
在特定请求下,每次都以完全相同的字节数(大约10kb / 463kb)出现问题
通过Wireshark侦听流量,我们注意到正在发送完整的数据,每个TCP数据包的最大大小为1460,可能小于每个网络设备的MTU,最后一个传递字节为不在包的边缘,而是在包的中间。