到目前为止,这是我NSURLSessionUploadTask
:
NSURLSessionUploadTask
URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:
等于totalBytesSent
HTTP/1.1 200 OK Server: BaseHTTP/0.3 Python/2.7.10 Date: Fri, 30 Oct 2015 16:15:21 GMT Content-Type: text/html <html><head><title>POST RESPONSE</title></head><body><p>The file was uploaded.</p></body></html>
totalBytesExpectedToSend
NSURLSessionTaskDelegate: -> URLSession:dataTask:didReceiveData:
此数据上传,HTTP 200响应,~200秒挂起过程似乎无限重复。为什么在iOS应用程序收到HTTP响应后不会调用NSURLSessionTaskDelegate -> URLSession:task:didCompleteWithError:
和NSURLSessionTaskDelegate: -> URLSession:dataTask:didReceiveData:
?
答案 0 :(得分:0)
通过HTTP请求将数据正确上传到服务器后,iOS应用程序收到了HTTP响应,但因为没有传输Content-Length
在HTTP响应中,iOS应用程序无法知道HTTP响应何时结束。两种可能的解决方案:
Content-Length
包含在HTTP响应中HTTP/1.1 200 OK Server: BaseHTTP/0.3 Python/2.7.10 Date: Fri, 30 Oct 2015 16:15:21 GMT Content-Type: text/html Content-Length: 96 <html><head><title>POST RESPONSE</title></head><body><p>The file was uploaded.</p></body></html>
我成功地尝试了两种解决方案,但Content-Length
解决方案更优越,因为它允许iOS应用程序和
服务器(假设服务器支持keep-alive
)维护套接字连接以用于将来的HTTP请求。
我还在github here上放了一个非常基本的NSURLSessionUploadTask示例应用程序和webserver。