27

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

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

但我想知道服务器响应是否有某种不同类型的探测会向我揭示这些信息

4

3 回答 3

44

要探测服务器的下载恢复功能,您可以向服务器发送 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。

于 2013-08-12T06:01:50.883 回答
5

添加到@aadel的答案:

如今,大多数服务器都以Accept-Ranges: bytes标头响应,以防它们支持恢复。PostmanRequestMakerInsomnia可以帮助您检查请求/响应标头。

于 2016-11-14T17:25:20.667 回答
0

您可以对其进行测试,开始、停止,然后重新开始下载:

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

无论出于何种原因,这(来自另一个答案)给了我一个 403:

curl -i -X HEAD --header "Range: bytes=50-100" http://...
于 2019-10-23T19:52:16.283 回答