我试图上传一个文件使用多部分/form-data POST请求。同样的请求也适用于不同系统上的其他人,但不适用于我的PC。我得到"RequestTimeout,你的套接字连接到服务器没有读取或写入超时时间内。s3服务器提示"空闲连接将被关闭"错误。
我使用ubuntu 16.04和curl发送请求。还尝试了curl的——data-binary选项,结果相同。
curl -X POST --header "Content-Type:multipart/form-data, boundary=xxxxxxxxxx" --data @x.txt http://some-server.s3.amazonaws.com
x.txt看起来像这样:
--xxxxxxxxxx
Content-Disposition: form-data; name="AWSAccessKeyId"
someaccesskey
--xxxxxxxxxx
Content-Disposition: form-data; name="success_action_status"
200
--xxxxxxxxxx
Content-Disposition: form-data; name="acl"
public-read
--xxxxxxxxxx
Content-Disposition: form-data; name="key"
/somedir/somefilename.png
--xxxxxxxxxx
Content-Disposition: form-data; name="Cache-Control"
no-cache
--xxxxxxxxxx
Content-Disposition: form-data; name="Content-Type"
image/png
--xxxxxxxxxx
Content-Disposition: form-data; name="policy"
somepolicy==
--xxxxxxxxxx
Content-Disposition: form-data; name="signature"
somesignature=
--xxxxxxxxxx
Content-Disposition: form-data; name="file"; filename="somefilename.png"
Content-Type: application/octet-stream
S
--xxxxxxxxxx--
在Wireshark中查看了我的机器上的现有数据包后,我发现Windows减少了它试图发送到Amazon的数据包的长度,Ubuntu将其保留为MTU 1500,在手动将其更改为536后,数据包通过了