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

Підтримка проксі-сервера та поле Хост:

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 багато розширює підтримку кешування, використовуючи щось, що називається "тег сутності". Якщо два ресурси однакові, вони матимуть однакові теги сутності.

HTTP 1.1 також додає умовні заголовки If-Unmodified-Since, If-Match, If-None-Match.

Існують також додаткові доповнення, що стосуються кешування, як заголовок Cache-Control.

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

У HTTP / 1.1 100 Продовжити новий код повернення. Це потрібно, щоб клієнт не надсилав великий запит, коли той клієнт навіть не впевнений, чи може сервер обробляти запит, або уповноважений обробляти запит. У цьому випадку клієнт надсилає лише заголовки, а сервер скаже клієнту 100 Продовжити, продовжуйте роботу з тілом.

Набагато більше:

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

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

2
HTTP 1.0 має підтримку стиснення через заголовок Content-Encoding. Як згадував Пол, я б напевно рекомендував будь-яким клієнтам HTTP / 1.0 надсилати заголовки хосту, оскільки це категорично не заборонено, і все частіше буде працювати так, як ви їх очікуєте. В іншому випадку це мертвий на.
cpm

@Paul Tomblin: Дякую, що я додав цю інформацію.
Брайан Р. Бонді

2
Що стосується "якщо у вас blahblahlbah.com та helohelohelo.com обидва вказують на один і той же IP. Ваш веб-сервер може використовувати поле Host, щоб визначити, який сайт клієнтська машина хоче". Отже, що відбувається, коли клієнт HTTP 1.0 не дає нам хост-поля для розрізнення?
Pacerier

@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 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?
Pacerier

@Troy - Чи дійсно надіслати відповідь на запит HTTP 1.1 і відразу після цього закрити з'єднання (сокет, з якого запит був прочитаний на сервері)? Це практично означає, що сервер реалізує HTTP 1.0
Гай Аврахам

5

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

Якщо ви хочете розробити такий додаток, як веб-сайт чи подібний, вам не потрібно надто турбуватися про відмінності, але вам слід знати хоча б різницю між GETі POSTдієсловами.

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

Якщо ви зацікавлені лише в тому, щоб знати протокол HTTP, я б рекомендував почати з HTTP / 1.1 замість 1.0.


1
Methinks Jason вже знає різницю між GET і POST, якщо він планує створити власний сервер / додаток HTTP з нуля. :)
Кев

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

2

HTTP 1.1 - це остання версія протоколу передачі гіпертексту, протоколу програми всесвітньої веб-програми, який працює на вершині протоколів 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 - кеш-контроль, це аналогічно прагмі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.