我们的 iOS 应用程序使用 aws sdk 使用 putObjectRequest 端点将小图片上传到 s3。
我们的一些用户受到一个奇怪问题的影响,该问题完全阻止他们在连接到特定 wifi 网络时上传任何图片。我们设法暂时解决了这个问题,但我们不知道是否有更好的解决方案,所以我们仍然想知道如何摆脱这个问题。
这是我们对这个问题的了解:
- 此问题影响多个 iOS 版本、iOS 设备、aws sdk 更新,我们多年来一直面临这个问题。
- 仅当用户连接到 wifi 时才会发生这种情况,使用移动网络不会导致任何问题。
- 被指控的 wifi ISP 是 Vodafone Italy,但我们不知道是否还有其他 ISP。小于 15kb 的文件更有可能正确上传,而大于 100kb 的文件总是失败。
- 问题是在从客户端上传图片数据到 s3 的过程中发生的。为此,我们使用 S3PutObjectRequest 类。
- 错误由 AmazonServiceRequestDelegate 协议的 request:didFailWithError: 方法在请求启动后两秒内返回。我们设法记录了在这种情况下发生的两个不同的错误实例:
- 错误域=NSURLErrorDomain 代码=-1200 “发生 SSL 错误,无法与服务器建立安全连接。”
- 错误域=NSURLErrorDomain 代码=-1021 “请求正文流已用尽”
我们试图做的事情:
使用最新版本更新 aws 库。这并没有解决问题。
为上传请求使用更大的 connectionTimeout 值。这并没有解决问题。正如我所说,错误在开始请求前几秒钟被触发。
将 aws 端点更改为使用 http 而不是 https:http://s3.amazonaws.com。这解决了这个问题。
您以前是否听说过这个问题,可能与另一个 wifi ISP 有关?使用 http 上传是否会通过以纯文本形式传递签名令牌将自己暴露在安全问题中?
我们使用 amz-security-token 标头中设置的临时令牌对每个请求进行签名,如下所述:http: //docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#UsingTemporarySecurityCredentials
谢谢