Протокол HTTP 1.0 против 1.1

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

HTTP / 1.1 (1997-1999)

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

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

8 ответов


поддержка прокси и поле 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-сервера. Он в основном используется для совместного использования ресурсов Cross Origin в интернете приложения.

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

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

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

протокол HTTP 1.1 и добавляет Если-без изменений-так, если матч, если-нет-матч с условными заголовками.

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

100 ПРОДОЛЖИТЬ статус:

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

много еще:

  • дайджест-аутентификация и прокси-аутентификация
  • дополнительные новые коды статуса
  • Поблочного кодирования
  • заголовке соединение
  • расширенная поддержка сжатия
  • многое другое.


HTTP HTTP 1.0 (1994)

  • Он все еще используется
  • может использоваться клиентом, который не может иметь дело с chunked (или сжатый) сервер отвечает

HTTP HTTP 1.1 (1996 - 2015)

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

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

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

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

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

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

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


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


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

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

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

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


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

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


по сравнению с 1.0, 1.1 сокращает интернет-трафик