2013-08-06 6 views
20

서버가 파일 전송을 다시 시작할 수 있는지 또는 요청을받을 수 있는지 어떻게 결정합니까?서버가 지원 요청 받기를 지원하는지 확인

내 생각은 그 적절한 결과

를 준 경우 HTTP 요청을 닫는 즉시 "2"바이트에서 GET 요청을 시작하는 헤더를 설정하는 대신 0을했다하지만 뭔가가 있다면 궁금 해서요 이 정보를 나에게 알려주는 다른 종류의 프로브에 대한 서버 응답

답변

32

서버의 다운로드 재개 기능을 조사하려면 임의의 값으로 Range 헤더를 제공하는 HEAD 요청을 서버에 보낼 수 있습니다. 응답 코드가 206이면 다시 시작이 지원됩니다. 곱슬

예 :

$ curl -i -X HEAD --header "Range: bytes=50-100" http://mirrors.melbourne.co.uk/ubuntu-releases//raring/ubuntu-13.04-desktop-amd64.iso

업데이트 :

가 여기에 자바의 예입니다 :

import org.apache.http.client.ResponseHandler; 
import org.apache.http.client.HttpClient; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.methods.HttpHead; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicHeader; 

public class ResumeChecker { 

    public final static void main(String[] args) throws Exception { 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpHead httpRequest = new HttpHead("http://www.google.com"); 
     httpRequest.addHeader(new BasicHeader("Range", "bytes=10-20")); 

     System.out.println("Executing request " + httpRequest.getURI()); 

     HttpResponse response = httpclient.execute(httpRequest); 

     // Check here that response.getStatusLine() contains 206 code 
    } 
} 

그러나, 나는 mysqlf 그것을 테스트하지 않았습니다.

+0

어떻게 자바 아파치 라이브러리에서이 작업을 수행할까요? '새로운 BasicHeader ("Range", "bytes = 50-100")? 여분의 것 – CQM

+0

아파치 라이브러리에 대해 모르지만 표준 lib 클래스 URL을 사용하면 connection.setRequestProperty ("Range", "bytes ="+ startvalue + "-"endValue)를 사용할 수 있습니다. –

4

@의 aadel의 대답에 추가 : 서버의 대부분은 요즘 경우 Accept-Ranges: bytes 헤더로 응답

가 재개 지원합니다. RequestMaker 또는 Insomnia은 요청/응답 헤더를 검사하는 데 도움을 줄 수 있습니다.

+1

야생에서 본 적이 있습니다. - Accept-Range : bytes로 응답하지만 원거리 다운로드를 지원하지 않는 서버 (적어도 일부 파일은 아니지만 전부는 아님). Range를 사용하여 요청을 보내면 요청한 부분 만있는 206이 아닌 200 전체 파일이됩니다. 잘못 작성된 HTTP/HTTPS 프록시 때문일 수 있습니다. 이야기의 도덕 : 헤더를 신뢰하지 마십시오. HEAD 요청을 어쨌든 만드십시오. 또는 GET의 응답 코드를 다시 확인하십시오. – Corrodias

+1

마지막 코멘트에 대한 수정 : 필연적으로 나쁘지는 않습니다. If-Range 헤더가 서버의 파일 버전과 다른 버전의 파일을 요청하고 있음을 나타내면 200이 유효한 응답입니다. 여전히, 테이크 어웨이는 200이 Range 요청에 대한 유효한 응답이라는 것입니다. – Corrodias