2013-08-06 8 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

更新:

は、ここでの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(" Range "、" bytes = 50-100 ")?任意のもの – CQM

+0

apacheライブラリについてはわかりませんが、標準の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

関連する問題