发布网友 发布时间:2024-10-24 18:59
共1个回答
热心网友 时间:2024-10-30 22:32
近期项目开发过程中,有个需求是文件断点续传,同时上传数量为5。按照正常上传方法,采用NSOperationQueue作为任务队列,NSOperation作为任务,添加到NSOperationQueue,具体实现后面再写。说说其中发生的奇怪的问题,当一个操作在多次点击暂停上传后,开始上传,终端出现
结果就是不管怎样,重新启动,切换网络环境都不起任何作用,上传一直处于失败状态,即使重新从头开始上传,上传到那一段还是会失败。且报的错是 <strong>“Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." "</strong> ,但其实网络是相通的,接口调用都没有问题。
经过Google,StackOverFlow,baidu后,查阅关键字
第一次试了修改 "<strong>Accept-Encoding:deflate</strong>" ,然后在同样测试环境下进行测试,结果和之前一样,未能够修复;第二个方法是让服务器修改 "<strong>Keep-Alive:timeout=5, max=100</strong>" ,或者更多,由于服务器是另外一个项目,没有权限进行尝试,况且别的项目没有说过这种情况,所以这种方法就不得而知,是否行得通;第三种方法也是我的 解决方案 ,其中有这样一段话:
翻译:
到了现在我才知道HTTP有个幂等性,查阅 资料
我上传使用的请求是POST,属于非幂等性,上传中多次点击后再次上传会导致错误的更新。于是我改成幂等性且与POST请求功能一致的PUT请求,PUT是幂等性方法。经过多次实践测试后,没有出现 <strong>失去连接("The Connect was Lost")</strong> 的提示,并且之前上传失败的连接在修改为PUT请求后也能够继续上传。问题得到解决。
经过这次Bug学习,了解到HTTP幂等性与非幂等性特性。也学习了POST、PUT请求的区别,对于这种有多次交互的请求的方法可以采用PUT请求试试哦!