一、问题描述
最近在 K8s 上面部署了一个应用,应用 Container 的 Command 中包含需要使用 curl -F file=@“filename” 来上传文件的命令,这条命令在本地环境中测试时没有出现问题,但是一到容器中就会报 curl: (52) Empty reply from server 的错误,并且此时服务器端其实已经接收到了数据。
二、问题分析
因为该问题当 curl 运行在本地时并未出现,因此推断该错误是由 curl 所引发的,且通过添加 -v 参数来获取 curl 在 Container 中的执行日志如下。
通过执行日志可以看到,curl 命令在使用 -F 参数提交文件时,会先向服务器发送一个 Expect: 100-continue(此时的报文已经包含了上传的文件数据),然后等待服务器响应 HTTP/1.1 100 Continue ,但其实我的服务器并没有响应 HTTP/1.1 100 Continue 的逻辑,因此 curl 最终会收到一个空的响应(或者可能是等待超时),导致了最终报 curl: (52) Empty reply from server 错误。
三、解决方案
给 curl 添加 -H “Expect:” 参数即可(即设置 Header 中的 Expect 属性值为空即可)。
四、引用资料
https://blog.csdn.net/caojianwei1992/article/details/107848536