2013-08-06 48 views
20

如何确定服务器是否支持恢复文件传输或获取请求?确定服务器是否支持恢复请求

我的想法是,以设置头开始以字节“2”的GET请求,而不是0,并立即关闭HTTP请求,如果给了正确的结果

,但我不知道是否有某种东西服务器对不同类型的探测器的响应,可能会向我显示此信息

回答

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

更新:

以下是一个Java的例子:

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

我该如何用java apache库来做到这一点? '新的BasicHeader(“范围”,“字节= 50-100”)?任何东西额外 – CQM

+0

不知道有关Apache库,但与标准的lib类的URL,你可以使用connection.setRequestProperty(“范围”,“字节=”+ startvalue +“ - ”+ endvalue) –

4

添加到@ aadel的回答是:

大多数服务器采用了时下Accept-Ranges: bytes头的情况下,应对他们支持断点续传。 RequestMakerInsomnia可以帮助您检查请求/响应标头。

+1

我见过 - 活跃,在野外 - 使用Accept-Range:bytes进行响应的服务器,但仍不支持范围下载(至少对于某些文件可能不支持所有文件)。使用Range发送请求会得到200和整个文件,而不是只有您请求的部分。它们可能是由于编写得不好的HTTP/HTTPS代理。故事的道德:不要相信标题。无论如何请做HEAD请求。或者仔细检查GET的响应代码。 – Corrodias

+1

纠正我最后的评论:它不一定写得很差。如果您的If-Range标头指示您要求服务器具有不同版本的文件,则200是有效的响应。然而,结论是200是对Range请求的有效响应。 – Corrodias

相关问题