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

라벨: , ,

 
2010년 7월 12일 월요일
  Android : Network Exception 유형 간단 정리

요청이 무사히 전달되면,
-
HTTP_OK(200)

존재하지 않는 주소로 요청을 보낼 때,
-
java.net.UnknownHostException 발생

존재하는 주소지만, 요청한 경로(혹은 파일)를 찾을 수 없을 때,
-
HTTP_NOT_FOUND(404)

존재하는 주소지만, 응답을 보내주는 웹서버가 없거나 비활성화인 경우,
-
IOException 발생 (java.net.ConnectionException)

인증실패시,

HTTP_UNAUTHORIZED(401) 



인터넷 연결이 안된 상태에서 connection 시도할 경우,
-
(1) IOException
(2) SocketException

위 두 exception 이 순차적으로 발생한다.




다운로드중 인터넷이 끊겼을 때, 
-
* exception 발생 시키려면 반드시, 
HttpURLConnection 객체에 setReadTimeout() 으로 시간을 적용시켜야 한다.

*만약, HttpClient 를 사용한다면 client.getParams().setParameter("http.socket.timeout", 5000);
위와 같이 적용해준다.


인터넷 끊김 후 위에 적용한 시간이 흐른 뒤,

(1) SocketTimeoutException

이 발생한다.

라벨:

 
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]