Як HTTP стає без громадянства?


26

Як кажуть, HTTP є без громадянства. Значить, не потрібно зберігати інформацію для передачі даних.

Але HTTP використовує TCP, орієнтований на стан.

Якщо це так, як HTTP стає без громадянства?


6
Як це не дублікат через 5 років після запуску Super User?
Пітер Мортенсен

Через те, що більшість дуп є на StackOverflow? Я просто здогадуюсь
trysis

8
Тільки тому, що він проходить через кабелі (серед інших), це також не робить його електричним протоколом
Хаген фон Ейтцен

Відповіді:


42

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

Транспортна технологія може бути TCP, або старий SPX Novell, або SCTP, або все, що ви можете придумати, і HTTP все одно працюватиме так само. HTTP вимагає потокового або орієнтованого на з'єднання протоколу - і залежить від вирішення URL-адрес - але не важливо, як це буде виконано.

Це одна з причин існування шаруватої моделі або мережевого стеку: шару програми не потрібно стосуватися нижчих шарів.

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

HTTP сам по собі є без громадянства. Це означає, що додатки повинні встановити ще один шар поверх HTTP, щоб встановити стан. Зазвичай це робиться за допомогою файлів cookie сеансу.


1
Маршрутизація відбувається на рівні tcp / ip.
Лабораторії Фіаско

3
Це зображення чудово пояснює це. vichargrave.com/wp-content/uploads/2013/01/…
JakeGould

2
На випадок, той факт, що HTTP ігнорує стан повного базового з'єднання (яке майже завжди буде TCP), є одним із головних недоліків у роботі, з якими намагаються вирішити різні підходи HTTP2 .
skolima

2
@Fiasco: Строго кажучи, маршрутизація відбувається на рівні IP. Маршрутизація базується на Інтернет-адресах, в базовій маршрутизації не використовується інформація із рівня TCP.
RedGrittyBrick

1
@skolima: з іншого боку, безгромадянство є причиною того, що HTTP є найбільш масштабованим та надійним протоколом у широкому використанні. HTTP завжди був чітко розроблений для масштабованості, а не продуктивності (так, вони різні речі), тому, якщо ви думаєте, що вам потрібні жорсткі низькі затримки, ніж ви використовуєте неправильний протокол або невірно використовуєте протокол. Хоча HTTP2 має намір покращити продуктивність, він робить це таким чином, що залишається вірним безгромадянству. Використовуючи те, для чого призначений, я ніколи не бачив, щоб безгромадянське становище було вузьким місцем добре розробленої програми HTTP.
Лі Лі Райан

10

"HTTP не має статусу" означає, що кожна транзакція HTTP (пара запит-відповідь) може бути оброблена незалежно від будь-якого стану з попередньої пари запит-відповідь.

Для транспортування конкретної пари запит-відповідь вам потрібен протокол, який здатний перенести довільно великий блок туди і довільно великий блок назад, і для цього над шаром з обмеженим розміром пакету TCP повинен бути репутаційним.

Але через кордон транзакцій, держави немає. Клієнт може перервати з'єднання та встановити новий для наступного запиту. Насправді це був єдиний варіант у ранніх версіях, і він все ще працює так, якщо клієнт не включає Connection: keep-aliveзаголовка.

Наступний запит також може бути легко оброблений різним сервером, і клієнт ніколи не дізнається, тому що серверу не потрібно підтримувати будь-який стан (якщо додаток не додає власний стан поверх HTTP, як правило, у формі сеансу; наслідки, що ускладнюються у балансуванні навантаження - це його покарання за побудову державного протоколу на HTTP). Цим скористаються переваги в завантажених серверах з балансування навантаження.


can also easily be handled by different server and the client will never knowХоча технічно це правда, це вводить в оману, оскільки багато веб-додатків використовують липкі сеанси, що вимагає балансира завантаження для маршрутизації майбутніх запитів з одного сеансу перегляду на той же сервер. З точки зору HTTP, сеанси не мають значення, але ваше останнє словосполучення має на увазі, що для роботи кінцевого користувача це не вплине, що було б помилковим для липких сесій.
Брендон

1
@Brandon: Такі додатки будують протокол на основі HTTP, і це покарання за це!
Ян Худек

@Brandon: Багато серверів з збалансованим завантаженням, наприклад, gmail, не надсилають запити на той же сервер. Натомість сеанс зберігається у спільній базі даних, до якої можуть отримати доступ усі сервери кластеру. Тому стан обробляється не сервером, а базою даних.
slebetman

@slebetman: Так, як би там не було. HTTP сам по собі не має такого стану, тому для HTTP це просто. Якщо додаток додає свій власний стан, це його боротьба.
Ян Худек

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

2

Характер HTTP «без громадянства» означає, що на цьому шарі інформація про стан не створюється і не використовується.

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

Навпаки, механізми входу на основі файлів cookie є стаціонарними, але не є частиною HTTP.


1

Ви повинні розуміти це як набір російських ляльок (або ящиків, якщо ви хочете), кожна з яких несе ще одну, всередині - це приблизно так, як це працює: TCP переносить HTTP «всередину», але це не хвилює його або його функції.

Для отримання цілої картини рекомендую ознайомитись з моделлю OSI, оскільки це робить більш зрозумілим.

TCP сидить на кілька шарів нижче HTTP в моделі OSI, кожен шар насправді відповідає іншому протоколу.

У нашому випадку HTTP знаходиться в шарах презентації та додатків, а TCP - у транспортному шарі. Або якщо ви використовуєте модель TCP / IP, і TCP, і протоколи IP розташовуються в шарі мережевої посилання, а HTTP - у шарах програми та презентації.


1
Проблема моделі OSI полягає в тому, що вона тепер теоретична (були фактичні спроби її впровадити, але вони провалилися на ринку через їх складність). Насправді між шарами TCP та HTTP немає шарів. Крім того, шаром презентації буде HTML, а не HTTP.
MSalters

У моделі TCP / IP TCP не живе в мережевому рівні. Він живе в транспортному шарі поверх IP, який знаходиться в мережі пізніше. Перший хіт Google для "моделі TCP" демонструє це: technet.microsoft.com/en-us/library/cc786900(v=ws.10).aspx
Брендон

@MSalters: Чи TLS не є шаром?
grawity

1
@MSalters: Ви розумієте, що HTTPS - це лише ім'я, яке HTTP тунелює TLS? Оскільки такий TLS є шаром під HTTP, а поверх TCP і TLS / SSL + HTTP комбо називається HTTPS.
slebetman

1
Також є ще одне нове ім'я для комбо TLS / HTTP. Якщо TLS, що здійснює трафік HTTP, реалізує віртуальний мультиплексування сокета / потоку, це називається SPDY (але URL у вашому браузері все ще є HTTPS).
slebetman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.