Ответ HEAD быстрее, чем GET? - PullRequest
       37

Ответ HEAD быстрее, чем GET?

6 голосов
/ 20 августа 2011

В настоящее время я получаю информацию о файлах с помощью GET, будет ли быстрее, если я перезапишу это с помощью запроса HEAD? Причина Я закрываю соединение после первого ответа.

Ответы [ 5 ]

12 голосов
/ 20 августа 2011

Ответ HEAD включает в себя только заголовки HTTP, но без тела - как правило, быстрее использовать HEAD, если вы не используете в теле информацию, которая обычно передавалась бы в ответе GET - если тела не было Начнем с того, что это не должно иметь значения.

Также от здесь :

Метод HEAD идентичен GET за исключением того, что сервер НЕ ДОЛЖЕН вернуть тело сообщения в ответе. Содержащаяся метаинформация в заголовках HTTP в ответ на запрос HEAD ДОЛЖНО быть идентичным к информации, отправленной в ответ на запрос GET. Этот метод может использоваться для получения метаинформации о сущности, подразумеваемой запрос без передачи самого объекта-тела. Этот метод часто используется для проверки гипертекстовых ссылок на достоверность, доступность, и недавняя модификация.

2 голосов
/ 20 августа 2011

Это, вероятно, незначительно. Это действительно зависит от того, что делает сервер. Получив запрос, вы не можете гарантировать, что ответ от HEAD-запроса или GET-запроса будет получен быстрее, чем другой.

Теоретически, поскольку ответ на запрос HEAD должен быть таким же, как и на запрос GET, но без тела ответа, он должен быть быстрее, поскольку при его передаче меньше данных. Но нет гарантии, что одно соединение, которое обрабатывает запрос HEAD, будет быстрее, чем другое соединение, обрабатывающее запрос GET.

2 голосов
/ 20 августа 2011

Вы не предоставили никакой информации о типе сервера, к которому вы обращаетесь, или о сети, к которой вы подключаетесь.

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

Если вам не нужен текст ответа, почему бы не использовать HEAD? Независимо от того, можете ли вы измерить разницу во времени отклика или нет, это более эффективно с точки зрения пропускной способности.

2 голосов
/ 20 августа 2011

То, будет ли HEAD быстрее, чем GET, зависит исключительно от реализации на стороне сервера (обычно это происходит из-за меньшего количества передаваемых данных) ... ЕСЛИ информация, предоставляемая HEAD, достаточна в вашем случае, я быпереходите к HEAD и используйте только откат к GET, где HEAD не реализован должным образом и / или какой-то неясный прокси работает с ним ...

1 голос
/ 16 февраля 2018

Важно отметить, что вы говорите о «запросах GET и запросах HEAD» - вместо «ответов GET и ответов HEAD»

Логически - запрос на HEAD иПОЛУЧИТЕ и то, и другое займет одинаковое количество времени, чтобы добраться от вашего компьютера до места назначения сервера.Все, что этот сервер делает с HEAD / GET, будет зависеть от владельца сервера, поэтому они могут сделать HEAD более длительным, если они закодировали его для этого.Если вы действительно хотите углубиться в семантику, вы можете утверждать, что запрос HEAD - это один дополнительный символ данных, чем запрос GET, поэтому запрос HEAD технически должен передавать на 1 байт данных больше в фазе запроса.На практике это будет неизмеримой разницей во времени запроса.

Если вы должны были запустить таймер с того момента, когда оба «ОТВЕТА» покинули сервер на обратном пути к запрашивающему, то логическиговоря, ответ GET займет больше времени, чтобы путешествовать по сети.Поскольку он обычно состоит из заголовков и тела, тело может содержать огромное количество данных.

Ответ на перемещение головы займет меньше времени, потому что это всего лишь заголовки.Приведем действительно экстремальный пример - если вы отправите запрос GET для файла объемом 4 ГБ, ответу GET потребуется несколько минут, чтобы завершить запись данных в сетевой поток.Запрос HEAD для того же файла 4 ГБ завершится практически мгновенно, поскольку он только отправляет информацию, которая описывает файл 4 ГБ на высоком уровне, без необходимости передавать его содержимое запрашивающей стороне.

A GETответ будет включать ГОЛОВУ + ТЕЛО.Ответ HEAD будет содержать только заголовки HTTP.

Я лично использую запросы HEAD в сочетании с технологией IPFS, которая представляет собой тип распределенного Интернета, где файлы и данные могут храниться на P2P.сеть.Чтобы сохранить файлы в сети, их необходимо часто запрашивать.Однако, если вы извлекаете файл с помощью запроса GET, вы в конечном итоге используете пропускную способность, чтобы загрузить тот файл 4 ГБ, который вы сохранили несколько недель назад.Однако выполнение запроса HEAD, в моем случае, сохраняет файл живым в сети, но не запрашивает 4 ГБ данных для передачи мне в сети.

...