Rails on me :)
2010년 7월 15일 목요일
  파일 이어받기 구현
[현재 작성 중인 포스트]

===============================================================================================================
다운로드 요청
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 헤더는 무시되고, 처음부터 다운로드 받는다.

라벨: , ,

 
댓글:
아이패드상에서 http로 파일 이어받기 구현중에 이 블로그 보고 많은 도움이 되었습니다. 자료 공유 감사합니다.
 
ㅎㅎ 아직 정리안된 불친절한 포스트인데 도움이 되었다니 저도 기쁩니다^^
 
댓글 쓰기

에 가입 댓글 [Atom]





<< 홈
with ruby core and CGIs

내 사진
이름:
위치: Seoul, South Korea

모니터 앞에서 싸구려 커피를 마시며

아카이브
3월 2010 / 4월 2010 / 5월 2010 / 6월 2010 / 7월 2010 / 11월 2010 / 12월 2011 /


Powered by Blogger

에 가입
글 [Atom]