web-dev-qa-db-ja.com

サーバーが再開取得要求をサポートしているかどうかを判別する

サーバーがファイル転送の再開またはリクエストの取得をサポートしているかどうかをどのように判断しますか?

私の考えは、getリクエストを0ではなくバイト「2」で開始するようにヘッダーを設定し、それが適切な結果をもたらした場合はすぐにhttpリクエストを閉じることでした。

しかし、この情報を私に明らかにする別の種類のプローブに対するサーバーの応答について何かあるのだろうかと思っていました。

25
CQM

サーバーのダウンロード再開機能を精査するには、任意の値を含むRangeヘッダーを提供するサーバーにHEAD要求を送信します。応答コードが206の場合、再開がサポートされます。

Curlの例:

$ 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はテストしていません。

39
aadel

@aadelの答えに追加:

最近のほとんどのサーバーは、再開をサポートしている場合に備えて、Accept-Ranges: bytesヘッダーで応答します。 RequestMaker または Insomnia は、要求/応答ヘッダーの調査に役立ちます。

4
Nika Kasradze

ダウンロードを開始、停止、再開してテストできます。

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

何らかの理由で、これは(別の答えから)私に403を与えました:

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