Из RFC:
HTTP используется Глобальной информационной инициативой Всемирной паутины с 1990 года. Первая версия HTTP, называемая HTTP / 0.9, была простым протоколом.для передачи необработанных данных через Интернет.
Перефразировано:
До стандартизации HTTP существовали различия в реализациях, которые означали, что они не всегда могли правильно общаться друг с другом (например, некоторые веб-сайты).-браузеры не могли работать с определенными веб-серверами).Статья RFC ссылается на эти реализации предварительной стандартизации как использующие HTTP/0.9
.
HTTP / 1.0, как определено RFC 1945, улучшил протокол, позволив сообщениям быть в формате MIME-подобногосообщения, содержащие метаинформацию о передаваемых данных и модификаторы по семантике запрос / ответ.Однако HTTP / 1.0 недостаточно учитывает эффекты иерархических прокси, кэширования, необходимости постоянных соединений и виртуальных хостов.Кроме того, распространение не полностью реализованных приложений, называющих себя «HTTP / 1.0», потребовало изменения версии протокола, чтобы два взаимодействующих приложения могли определить истинные возможности друг друга.
Перефразировано:
После того, как HTTP был стандартизирован как HTTP/1.0
, это, безусловно, помогло решить проблемы совместимости и совместимости, но версия 1.0
протокола просто предполагала, что все программное обеспечение HTTP сможет использовать его для своего существующего приложения, но теперь, когда HTTP/1.0
В течение некоторого времени сопровождающие спецификации протокола HTTP видели, что им необходимо расширить HTTP для поддержки этих вариантов использования (например, прокси, кэши, постоянные соединения, виртуальные хосты), и хотя оничто-то можно сделать, используя встроенные механизмы расширения в HTTP/1.0
, они чувствовали необходимость увеличить номер версии до HTTP/1.1
, чтобы предотвратить реализацию, просто предполагая, что удаленный хост поддерживает функцию или нет.
Пример
Хорошим примером является заголовок Host
в HTTP/1.1
, который позволяет веб-серверу, обслуживающему один IP-адрес и номер порта, обслуживать разные веб-сайты на основе заголовка Host
(как и раньше).HTTP/1.1
существующие веб-серверы могут обслуживать только один веб-сайт на IP-адрес, что является проблемой).HTTP/1.0
позволяет клиентам и серверам добавлять свои собственные пользовательские заголовки, такие как Host
, однако клиент или сервер не могут узнать, что другой конец фактически поддерживает заголовок Host
.Но в HTTP/1.1
заголовок Host
был ранее добавлен в спецификацию, поэтому, если и клиент, и сервер заявляют, что они используют HTTP/1.1
, тогда другой конец знает, что они распознают заголовок Host
и обрабатывают его правильно.
Таким образом, в HTTP/1.0
дни, с пользовательскими заголовками , вот как это будет воспроизводиться, если браузер запросит www.example.com
, если он будет обслуживаться с общего веб-хоста:
Browser (to DNS server): "Please give me the IP address for 'www.example.com'"
DNS Server (to browser): "www.example.com is 198.51.100.7"
Browser (to 198.51.100.7): "Hello, I speak HTTP/1.0, please send me index.html for Host: www.example.com
Server (to browser): "I also speak HTTP/1.0, here is index.html for 'not-actually-example.com'"
Как видите, браузер получил not-actually-example.com
, даже если он запросил www.example.com
, потому что веб-сервер использовал HTTP/1.0
, который не распознает заголовок Host
, хотя веб-сервербраузер отправлял заголовок Host
(как расширение / экспериментальный заголовок). Программное обеспечение браузера не может определить, является ли not-actually-example.com
желаемым пользователем или нет .