使用JMeter通过预签名URL向Amazon S3上传Zip文件遇连接重置问题
解决JMeter中S3预签名URL上传Zip文件的两个问题
一、修复Content-Type被自动修改的问题
S3预签名URL生成时会绑定指定的Content-Type,如果实际请求的类型不匹配,会直接触发服务器拒绝,这也可能是连接重置错误的根源。按以下步骤确保Content-Type正确:
- 强制设置请求头:在HTTP请求的「Headers Manager」中添加头字段:
Content-Type: application/x-zip-compressed
确保这个头没有被其他配置覆盖(比如不要在Parameters里重复设置Content-Type参数)。 - 禁用自动Content-Type推断:
- 如果使用PUT请求(S3预签名上传通常用PUT),不要勾选HTTP请求中的「Use multipart/form-data for POST」选项——表单上传会自动添加边界和Content-Type,干扰自定义设置。
- 修改JMeter配置文件
jmeter.properties,添加或修改:
重启JMeter后生效,这会禁用基于文件扩展名的自动Content-Type设置。httpclient.parameter.file_upload_policy=RFC1867
- 确认请求方法:确保HTTP请求的方法是
PUT,而非POST——S3预签名PUT URL不支持POST表单上传方式。
二、解决Connection reset by peer错误
这个错误通常是服务器主动断开连接,结合Content-Type问题,优先排查以下点:
- 验证预签名URL的一致性:生成预签名URL时必须指定
Content-Type: application/x-zip-compressed,实际请求的头要完全匹配,否则S3会拒绝并断开连接。 - 调整超时设置:在HTTP请求的「Advanced」标签中,增大「Connection Timeout」和「Response Timeout」的值,比如设为
60000(60秒),避免大文件上传时超时被断开。 - 切换HTTP客户端实现:在HTTP请求的「Implementation」下拉框中,尝试切换为「Java」或「HC4」客户端,不同的客户端实现对请求头的处理和网络兼容性不同。
- 测试预签名URL有效性:用curl命令直接测试,排除JMeter配置问题:
如果curl也报错,说明预签名URL本身存在问题(比如Expires过期、Signature错误、权限不足),需要重新生成正确的预签名URL。curl -X PUT -H "Content-Type: application/x-zip-compressed" --data-binary @./your-file.zip "your-presigned-s3-url"
内容的提问来源于stack exchange,提问作者Saurabh
相关产品推荐
相关产品推荐

