相关文章推荐
正直的饺子  ·  jquery移动元素位置-掘金·  2 年前    · 

https://www.jiweichengzhu.com/article/81044c11caf54753aeed94ef8fad1070
https://blog.csdn.net/chenz_yang/article/details/77238532

终端设备(Debian系统、戴尔服务器)通过HTTPS向云端上报数据时,有的数据如设备心跳能上报,有的数据如服务器配置信息上报时报错:
Unexpected end of file from server
在这里插入图片描述

“Unexpected end of file” implies that the remote server accepted and closed the connection without sending a response. It’s possible that the remote system is too busy to handle the request, or that there’s a network bug that randomly drops connections.
With the information available it’s impossible to say what’s going wrong. If you have access to the servers in question you can use packet sniffing tools to find what exactly is sent and received, and look at logs to of the server process to see if there are any error messages.
意思就是说“意外的文件结束”意味着远程服务器接受并关闭连接,而不发送响应。远程系统可能太忙,无法处理请求,或者有网络错误随机丢弃连接。
有了可用的信息,不可能说出了什么问题。如果您有权访问有问题的服务器,您可以使用数据包嗅探工具来查找发送和接收的内容,并查看服务器进程的日志,以查看是否有任何错误消息。

应该是云端服务器主动关闭了TCP连接。

再查看云端的日志,发现报了 nginx 408 错误。

并且只是个别终端设备在上报数据时会出现上述问题,即终端报 Unexpected end of file from server ,云端报 nginx 408

查资料, nginx 408 与一下参数有关:

client_header_timeout
定义读取客户端请求请求头的超时,默认60s,如果客户端未在此时间内传输整个请求头,则请求将终止,并显示 408(请求超时)错误。‎

client_body_timeout
‎定义读取客户端请求正文的超时,默认60s,超时仅设置在两个连续读取操作之间的一段时间内,而不是为整个请求正文的传输设置,如果客户端未在此时间内传输任何内容,则请求将终止,并显示 408(请求超时)错误。‎

结合 “ 上述问题仅限于个别终端设备的个别接口 ”以及“nginx 408”的原因,初步认为:

部分终端设备在上报某些数据时可能出现了丢包

而使用ping检查终端与云端之间的网络,网络延迟并不大,而且仅仅是在上报某些数据时出现上述问题,怀疑可能是:
MTU设置不当导致终端到云端之间数据链路上的某个节点出现了丢包

终端设备网口的MTU是1500,修改为1200,问题就解决了。

什么是MTU?

MTU: 最大传输单元,意思是网络上传输最大的数据包,mtu的单位是字节。

大部分的网络设备的mtu默认值是1500。如果本机的mtu值大于网关的mtu值,大的数据包就会被拆开来传送,这样会产生数据包的碎片,增加丢包率,降低网络速度。把mtu设置比网关小或者相同,可以减少丢包。设置合适的mtu值,可以减少部分网站打不开,上网速度慢等问题。一般情况,可以把路由器、交换机和服务器的mtu值统一设置。

查看服务器的mtu值

cat /sys/class/net/网口名称/mtu
# ifconfig
ens18: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1200

临时修改mtu值:(重启服务器后失效)

ifconfig  <网口名称> mtu 1200

在NetworkManager的连接配置文件里配置mtu,在[ethernet]选项添加一行 mtu=1280:
在这里插入图片描述

在tomcat部署项目时,tomcat启动日志正常,但是其他工程访问该tomcat下的工程出现java.net.SocketException: Unexpected end of file from server错误,网上说原因比较多,查阅了好几篇博客,最终发现使用https协议的时候tomcat出现了日志,灵感一下想到是因为tomcat的server.xml配置了https认证证书,去掉之后成 PyCharm安装插件时出现 Error loading package list:Unexpected end of file from server提示窗口。将Python Interpreter——>+——>Manage Repositories中无法用的源删掉。 以下问题可能是网络限制引起的,可以通过测试服务器能否访问程序需要涉及到的网络试试。 java.net.SocketException: Unexpected end of file from server at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:741) at sun.net.www.http.HttpC... springboot RestTemplate post请求外部接口时,报错误;同样的请求内容使用postman则不报错,使用wireshark抓包后发现,RestTemplate 发送的http虽然未达到tcp MSS(默认的1460字节),但仍然而postman使用了,我们知道,应用层是无法控制tcp数据包数量的。默认的,使用发送请求,NettyOkHttp从源码得知,HttpURLConnection在发送http body之前会先发送header并且调用了flush方法,这里的。 1.最开始使用httpRequest方法,返回unexpected end of file from server; 2.将HttpURLConnection 替换为HttpsURLConnection ,方法名改为httpsRequest,此时,代码中没有HttpURL... public static String httpRequest(String urlStr, String content, String requestMethod) throws IOException { URL u Caused by: java.net.SocketException: Unexpected end of file from server at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:769) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:6... java.net.SocketException: Unexpected end of file from server at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:806) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:665) at sun.ne...