HTTP 1.0 против 1.1


263

Может ли кто-нибудь дать мне краткий обзор различий между HTTP 1.0 и HTTP 1.1? Я провел некоторое время с обоими RFC, но не смог вытащить большую разницу между ними. Википедия говорит это:

HTTP / 1.1 (1997-1999)

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

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


Это довольно хорошее резюме основных различий: http://www.research.att.com/~bala/papers/h0vh1.html
Кев,

3
Хорошо, что вы пошли к источнику. Похоже, вы вообще не знаете о работе в сети, если не понимаете этого резюме. Возможно, вам следует изучить и эти термины.
Марчин

4
Хотя я все еще новичок, когда дело доходит до этого, моя основная проблема заключается в том, что резюме дает мне больше «что», а не «как».
Джейсон Бейкер


Ответы:


363

Поддержка прокси и поле Host:

HTTP 1.1 имеет требуемый заголовок хоста по спецификации.

HTTP 1.0 официально не требует заголовка хоста, но добавить его не мешает, и многие приложения (прокси) ожидают увидеть заголовок хоста независимо от версии протокола.

Пример:

GET / HTTP/1.1
Host: www.blahblahblahblah.com

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

Так что это означает, что если у вас blahblahlbah.com и helohelohelo.com оба указывают на один и тот же IP. Ваш веб-сервер может использовать поле «Хост», чтобы определить, какой сайт хочет клиентский компьютер.

Постоянные связи:

HTTP 1.1 также позволяет вам иметь постоянные соединения, что означает, что вы можете иметь более одного запроса / ответа на одно и то же соединение HTTP.

В HTTP 1.0 вам приходилось открывать новое соединение для каждой пары запрос / ответ. И после каждого ответа соединение будет закрыто. Это приводит к большим проблемам с эффективностью из-за медленного запуска TCP .

ВАРИАНТЫ МЕТОДА:

HTTP / 1.1 представляет метод OPTIONS. HTTP-клиент может использовать этот метод для определения возможностей HTTP-сервера. В основном он используется для перекрестного общего доступа к ресурсам в веб-приложениях.

Кэширование:

HTTP 1.0 поддерживает кэширование через заголовок: If-Modified-Since.

HTTP 1.1 расширяет поддержку кэширования, используя так называемый «тег сущности». Если 2 ресурса одинаковы, они будут иметь одинаковые теги сущностей.

HTTP 1.1 также добавляет условные заголовки If-Unmodified-Since, If-Match, If-None-Match.

Есть также дополнительные дополнения, связанные с кэшированием, такие как заголовок Cache-Control.

100 Продолжить статус:

В HTTP / 1.1 100 добавлен новый код возврата. Продолжить. Это сделано для предотвращения отправки клиентом большого запроса, когда этот клиент даже не уверен, может ли сервер обработать запрос или авторизован для обработки запроса. В этом случае клиент отправляет только заголовки, а сервер сообщит клиенту 100 продолжить, продолжайте с тела.

Гораздо более:

  • Дайджест-аутентификация и прокси-аутентификация
  • Дополнительные новые коды состояния
  • Кодировка передачи по частям
  • Заголовок подключения
  • Расширенная поддержка сжатия
  • Гораздо больше

15
Обратите внимание, что многие серверы / прокси, которые утверждают, что хотят HTTP / 1.0, очень расстроятся, если вы пропустите заголовок Host.
Пол Томблин

2
HTTP 1.0 поддерживает сжатие через заголовок Content-Encoding. Как упомянул Пол, я бы определенно рекомендовал всем клиентам HTTP / 1.0 отправлять заголовок Host, поскольку это строго не запрещено, и все будет работать чаще, чем вы ожидаете. В противном случае, он мертв.
cpm

@ Пол Томблин: Спасибо, я добавил эту информацию.
Брайан Р. Бонди

2
Относительно того, «если у вас есть и blahblahlbah.com, и helohelohelo.com, указывающие на один и тот же IP-адрес. Ваш веб-сервер может использовать поле« Хост », чтобы определить, какой сайт требуется клиентскому компьютеру». Так что же происходит, когда клиент HTTP 1.0 не дает нам поля хоста для различения?
Пейсер

@Pacerier обычно является страницей по умолчанию некоторого вида; это зависит от сервера.
Эндрю Ламберт

14

 HTTP 1.0 (1994)

  • Это все еще используется
  • Может использоваться клиентом, который не может обрабатывать фрагментированные (или сжатые) ответы сервера

 HTTP 1.1 (1996–2015 годы)

  • Формализует множество расширений до версии 1.0
  • Поддерживает постоянные и конвейерные соединения
  • Поддерживает частичные передачи, сжатие / декомпрессию
  • Поддерживает виртуальный хостинг (сервер с одним IP-адресом, на котором размещено несколько доменов)
  • Поддерживает несколько языков
  • Поддерживает передачу байтового диапазона; полезно для возобновления прерванной передачи данных

HTTP 1.1 является улучшением HTTP 1.0. Ниже перечислены четыре основных улучшения:

  1. Эффективное использование IP-адресов, позволяя обслуживать несколько доменов с одного IP-адреса.

  2. Более быстрый отклик, позволяя веб-браузеру отправлять несколько запросов через одно постоянное соединение.

  3. Более быстрый отклик для динамически генерируемых страниц благодаря поддержке кодирования по частям, что позволяет отправлять ответ до того, как станет известна его общая длина.
  4. Более быстрый отклик и значительная экономия пропускной способности за счет добавления поддержки кэша.

9

Для тривиальных приложений (например, время от времени извлекающих значение температуры из веб-термометра) HTTP 1.0 подходит как для клиента, так и для сервера. Вы можете написать простой HTTP-клиент или сервер HTTP 1.0 на основе примерно 20 строк кода.

Для более сложных сценариев HTTP 1.1 - это путь. Ожидайте увеличения размера кода в 3-5 раз, чтобы справиться со сложностями более сложного протокола HTTP 1.1. Сложность в основном возникает потому, что в HTTP 1.1 вам нужно будет создавать, анализировать и отвечать на различные заголовки. Вы можете защитить свое приложение от этой сложности, если клиент использует библиотеку HTTP или сервер использует сервер веб-приложений.


7

Ключевой проблемой совместимости является поддержка постоянных соединений . Недавно я работал на сервере, который «поддерживал» HTTP / 1.1, но не смог закрыть соединение, когда клиент отправил запрос HTTP / 1.0. При написании сервера, поддерживающего HTTP / 1.1, убедитесь, что он также хорошо работает с клиентами, использующими только HTTP / 1.0.


8
Требует ли HTTP / 1.1, чтобы мы были совместимы с HTTP / 1.0?
Пейсер

@ Трой - допустимо ли отправить ответ на запрос HTTP 1.1 и сразу же после этого закрыть соединение (сокет, с которого был прочитан запрос на сервере)? Что практически означает, что сервер реализует HTTP 1.0
Гай Авраам

5

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

Если вы хотите разработать приложение , как веб - сайт или подобное, вам не нужно слишком беспокоиться о различиях , но вы должны знать разницу между GETи POSTглаголов , по крайней мере.

Теперь, если вы хотите разработать браузер, тогда да, вам нужно будет знать полный протокол, а также, если вы пытаетесь разработать HTTP-сервер.

Если вы заинтересованы только в знании протокола HTTP, я бы порекомендовал вам начать с HTTP / 1.1 вместо 1.0.


1
Метинкс Джейсон уже знает разницу между GET и POST, если собирается создать собственный HTTP-сервер / приложение с нуля. :)
Кев

1
Я действительно проделал некоторую работу с веб-сервером, который в настоящее время поддерживает только HTTP 1.0, мне было просто интересно, что связано с добавлением поддержки 1.1.
Джейсон Бейкер

2

HTTP 1.1 - это последняя версия протокола передачи гипертекста, протокола приложений World Wide Web, который работает поверх набора протоколов TCP / IP в Интернете. По сравнению с HTTP 1.0, HTTP 1.1 обеспечивает более быструю доставку веб-страниц, чем исходный HTTP, и снижает веб-трафик.

Пример веб-трафика: например, если вы обращаетесь к серверу. В то же время так много пользователей обращаются к серверу за данными, тогда есть шанс повесить сервер. Это веб-трафик.


1

HTTP 1.1 поставляется с заголовком узла в своей спецификации, в то время как HTTP 1.0 официально не имеет заголовка узла, но он не отказывается добавить его.

Заголовок хоста полезен, потому что он позволяет клиенту направлять сообщение через прокси-сервер, и основное различие между версиями HTTP 1.0 и 1.1:

  1. HTTP 1.1 поставляется с постоянными соединениями, которые определяют, что мы можем иметь более одного запроса или ответа на одно и то же соединение HTTP.
  2. в то время как в HTTP 1.0 вы должны открывать новое соединение для каждого запроса и ответа
  3. В HTTP 1.0 он имеет прагму, в то время как в HTTP 1.1 он имеет Cache-Control, это похоже на прагму

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.