Запрос HEAD против запроса GET - PullRequest
       25

Запрос HEAD против запроса GET

4 голосов
/ 19 октября 2011

У меня всегда была идея, что выполнение запроса HEAD вместо запроса GET было бы быстрее (независимо от размера ресурса) и, следовательно, имело свои преимущества в некоторых решениях.

Однако,делая запрос HEAD в Python (к динамически генерируемому ресурсу объемом 5 МБ), я понял, что это заняло столько же времени, сколько и запрос GET (почти 27 секунд вместо «менее 2 секунд», на который я надеялсяfor).

Использовал некоторые решения urllib2, чтобы сделать запрос HEAD, найденный здесь, и даже использовал pycurl (установка headers и nobody в True).Оба они заняли одно и то же время.

Я что-то упустил концептуально?Можно ли с помощью Python выполнить «быстрый» HEAD запрос?

Ответы [ 3 ]

7 голосов
/ 19 октября 2011

Сервер тратит большую часть времени, а не ваш запросчик или сеть.Если это динамический ресурс, вероятно, что сервер не знает всю информацию заголовка - в частности, Content-Length - до тех пор, пока не соберет его.Так что все это должно быть построено независимо от того, делаете вы ГОЛОВУ или ПОЛУЧАЕТЕ.

1 голос
/ 19 октября 2011

Скорее всего, основная часть этого времени запроса - это фактически процесс, который генерирует ответ 5 + МБ на сервере, а не время его передачи вам.

Во многих случаях веб-приложение все еще будетвыполнить полный сценарий при ответе на запрос HEAD - он просто не отправит полное тело обратно запрашивающей стороне.

Если у вас есть доступ к коду, обрабатывающему этот запрос, вы можетедобавьте условие, чтобы он обрабатывал запрос по-разному в зависимости от метода, что могло бы значительно ускорить его.

1 голос
/ 19 октября 2011

Время ответа определяется сервером, а не вашим запросом. Запрос HEAD возвращает меньше данных (только заголовки), так что концептуально он должен быть быстрее, но на практике многие статические ресурсы кэшируются, поэтому практически нет заметных различий (только время, когда дополнительные пакеты выходят в сеть).

...