2013-08-06 4 views
20

Как определить, поддерживает ли сервер возобновление передачи файла или получение запроса?определить, поддерживает ли сервер возобновление запроса на получение запроса

Мои мысли были установить заголовок для запуска запроса GET в байте «2» вместо 0, и немедленно закрыть запрос HTTP, если это дает правильный результат

, но мне было интересно, если там было что-то ответ сервера для другого типа зонда, который откроет мне эту информацию.

ответ

32

Чтобы исследовать функцию возобновления загрузки сервера, вы можете отправить запрос 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

Update:

Вот пример в 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? 'new BasicHeader (« Range »,« bytes = 50-100 »)? любая вещь дополнительно – CQM

+0

Не знаю о библиотеке apache, но с стандартным URL класса lib, вы можете использовать connection.setRequestProperty («Range», «bytes =» + startvalue + »-« + endvalue) –

4

Добавление ответа @ aadel в:

Большинство серверов в настоящее время отвечают Accept-Ranges: bytes заголовка в случае, если они поддерживают докачку. RequestMaker или Insomnia могут помочь вам изучить заголовки запросов/ответов.

+1

Я видел - активный, в дикой природе - серверы, которые отвечают Accept-Range: байты, но по-прежнему не поддерживают загрузку в диапазоне (по крайней мере, для некоторых файлов, но не для всех). Отправка запроса с помощью Range дает вам 200 и весь файл, а не 206 только с той частью, которую вы запросили. Возможно, это связано с плохо написанными проксими HTTP/HTTPS. Мораль истории: не доверяйте заголовкам. Сделайте запрос HEAD в любом случае. Или дважды проверьте код ответа GET. – Corrodias

+1

Исправление к моему последнему комментарию: Это не обязательно плохо написано. 200 - это действительный ответ, если заголовок If-Range указывает, что вы запрашиваете другую версию файла с тем, что имеет сервер. Тем не менее, вынос заключается в том, что 200 является действительным ответом на запрос диапазона. – Corrodias

Смежные вопросы