确定服务器是否支持resume get request

时间:2013-08-06 15:43:38

标签: http get http-headers download resume-download

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

我的想法是将标头设置为以字节“2”而不是0开始获取请求,如果得到正确的结果则立即关闭http请求

但是我想知道是否有一些关于服务器响应的内容可用于向我公开此类信息的其他类型的探测

3 个答案:

答案 0 :(得分:37)

要探测服务器的下载恢复功能,您可以向服务器发送HEAD请求,并提供具有任意值的Range标头。如果响应代码为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。

答案 1 :(得分:4)

添加到@ aadel&#39答案:

现在大多数服务器都会使用Accept-Ranges: bytes标头进行响应,以防它们支持恢复。 RequestMakerInsomnia可以帮助您检查请求/响应标头。

答案 2 :(得分:0)

您可以测试,开始,停止然后重新开始下载:

curl --continue-at - http://... >> file.out

出于任何原因,这(从另一个答案中)给了我403:

curl -i -X HEAD --header "Range: bytes=50-100" http://...