파일 이어받기 구현
[현재 작성 중인 포스트]
===============================================================================================================
다운로드 요청
request
특별한 파라미터 없음
response
07-15 20:24:29.619: INFO/response *name* and *value*(8182): Date = Thu, 15 Jul 2010 11:27:16 GMT
07-15 20:24:29.619: INFO/response *name* and *value*(8182): Server = Apache/2.2.12 (Ubuntu)
07-15 20:24:29.629: INFO/response *name* and *value*(8182): Last-Modified = Mon, 05 Jul 2010 01:58:21 GMT
07-15 20:24:29.629: INFO/response *name* and *value*(8182): ETag = "
a0ac5-1400000-48a9a4570a8c9"
07-15 20:24:29.629: INFO/response *name* and *value*(8182): Accept-Ranges = bytes
07-15 20:24:29.629: INFO/response *name* and *value*(8182): Content-Length = 20971520
07-15 20:24:29.629: INFO/response *name* and *value*(8182): Keep-Alive = timeout=15, max=100
07-15 20:24:29.629: INFO/response *name* and *value*(8182): Connection = Keep-Alive
07-15 20:24:29.639: INFO/response *name* and *value*(8182): Content-Type = application/zip
07-16 09:52:37.606: INFO/**status code**(13384):
HTTP/1.1 200 OK
! etag 가 반환된다.
다운로드 이어받기를 구현하려면,
(1) 이 etag 를 기억하고,
(2) 현재까지 다운받을 양을 기억해둬야 다음 이어받기 요청시 서버가 이를 자동으로 처리해준다(Apache 의 경우, 그 외 다른 서버는 모르겠다).
===============================================================================================================
파일 이어서 다운받기 요청시,
request
07-15 20:28:02.999: INFO/request *name* and *value*(8467): Range =
bytes=6295290-
07-16 09:54:17.046: INFO/request *name* and *value*(13608): If-Range = "
a0ac5-1400000-48a9a4570a8c9"
response 시,
07-15 20:28:02.999: INFO/response *name* and *value*(8467): Date = Thu, 15 Jul 2010 11:30:49 GMT
07-15 20:28:02.999: INFO/response *name* and *value*(8467): Server = Apache/2.2.12 (Ubuntu)
07-15 20:28:02.999: INFO/response *name* and *value*(8467): Last-Modified = Mon, 05 Jul 2010 01:58:21 GMT
07-15 20:28:02.999: INFO/response *name* and *value*(8467): ETag = "
a0ac5-1400000-48a9a4570a8c9"
07-15 20:28:02.999: INFO/response *name* and *value*(8467): Accept-Ranges = bytes
07-15 20:28:02.999: INFO/response *name* and *value*(8467): Content-Length = 14676230
07-15 20:28:03.009: INFO/response *name* and *value*(8467): Content-Range =
bytes 6295290-20971519/20971520
07-15 20:28:03.009: INFO/response *name* and *value*(8467): Keep-Alive = timeout=15, max=100
07-15 20:28:03.009: INFO/response *name* and *value*(8467): Connection = Keep-Alive
07-15 20:28:03.009: INFO/response *name* and *value*(8467): Content-Type = application/zip
07-16 09:45:55.276: INFO/**status code**(13117):
HTTP/1.1 206 Partial Content
! etag 가 동일하다
================================================================================================================
파일 이어서 다운받기 요청시 (하지만 서버의 다운받을 파일이 변경되었을 때!!),
request
07-16 09:54:17.046: INFO/request *name* and *value*(13608): Range =
bytes=12388474-
07-16 09:54:17.046: INFO/request *name* and *value*(13608): If-Range = "
a0b25-2137785-48b76a85b3857"
response
07-16 09:54:17.276: INFO/response *name* and *value*(13608): Date = Fri, 16 Jul 2010 00:57:07 GMT
07-16 09:54:17.276: INFO/response *name* and *value*(13608): Server = Apache/2.2.12 (Ubuntu)
07-16 09:54:17.286: INFO/response *name* and *value*(13608): Last-Modified = Fri, 16 Jul 2010 00:56:19 GMT
07-16 09:54:17.286: INFO/response *name* and *value*(13608): ETag = "
a0b25-321f627-48b76afd27997"
07-16 09:54:17.286: INFO/response *name* and *value*(13608): Accept-Ranges = bytes
07-16 09:54:17.286: INFO/response *name* and *value*(13608): Content-Length = 40168877
07-16 09:54:17.286: INFO/response *name* and *value*(13608): Keep-Alive = timeout=15, max=100
07-16 09:54:17.286: INFO/response *name* and *value*(13608): Connection = Keep-Alive
07-16 09:54:17.286: INFO/response *name* and *value*(13608): Content-Type = application/zip
07-16 09:54:17.296: INFO/**status code**(13608):
HTTP/1.1 200 OK
! etag 가 다르다 :)
응답코드도 206 이 아닌 200 이다.
서버 파일이 변경되었기에, 요청 header 의 Range 헤더는 무시되고, 처음부터 다운로드 받는다.
라벨: Android, Java, Network