调用completeMultipartUpload遇S3 411 Content-Length缺失错误求助
解决S3 completeMultipartUpload接口411 Length Required错误
问题背景
调用S3兼容存储的completeMultipartUpload接口时返回411 Length Required错误,错误代码MissingContentLength,已确认接口参数(Bucket、Key、UploadId、Parts)结构合法,问题出在请求未携带Content-Length头。
解决方法
升级AWS PHP SDK版本
旧版本SDK可能存在自动计算并添加Content-Length头的逻辑缺陷,升级到AWS SDK for PHP v3的最新稳定版本,SDK会自动处理请求头的生成,多数情况下可直接解决问题。手动指定Content-Length请求头
通过SDK的请求选项手动添加该头,计算请求体的长度并传入:// 计算Parts参数序列化后的长度 $contentLength = strlen(json_encode(['Parts' => $parts])); $result = $s3->completeMultipartUpload([ 'Bucket' => $bucket, 'Key' => $key, 'UploadId' => $uploadId, 'Parts' => $parts ], [ '@http' => [ 'headers' => [ 'Content-Length' => $contentLength ] ] ]);排查代理/网络环境
若服务通过代理访问存储服务,部分代理会篡改或移除Content-Length头,检查代理配置,确保其保留该请求头,或在代理层强制添加正确的Content-Length值。检查自定义HTTP客户端配置
若你为SDK自定义了HTTP客户端(如Guzzle),确认客户端未禁用自动添加Content-Length的功能,确保客户端默认的请求头处理逻辑正常工作。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

