Як кажуть, HTTP є без громадянства. Значить, не потрібно зберігати інформацію для передачі даних.
Але HTTP використовує TCP, орієнтований на стан.
Якщо це так, як HTTP стає без громадянства?
Як кажуть, HTTP є без громадянства. Значить, не потрібно зберігати інформацію для передачі даних.
Але HTTP використовує TCP, орієнтований на стан.
Якщо це так, як HTTP стає без громадянства?
Відповіді:
HTTP не переймається - і не залежить від - будь-якого протоколу нижчого рівня, який використовується для самої транспортування, хоча сам він є без громадянства.
Транспортна технологія може бути TCP, або старий SPX Novell, або SCTP, або все, що ви можете придумати, і HTTP все одно працюватиме так само. HTTP вимагає потокового або орієнтованого на з'єднання протоколу - і залежить від вирішення URL-адрес - але не важливо, як це буде виконано.
Це одна з причин існування шаруватої моделі або мережевого стеку: шару програми не потрібно стосуватися нижчих шарів.
Тільки тому, що протокол нижчого рівня є загальнонаціональним, це не означає, що нічого над ним автоматично стає статевим або вимагає стану репутації.
HTTP сам по собі є без громадянства. Це означає, що додатки повинні встановити ще один шар поверх HTTP, щоб встановити стан. Зазвичай це робиться за допомогою файлів cookie сеансу.
"HTTP не має статусу" означає, що кожна транзакція HTTP (пара запит-відповідь) може бути оброблена незалежно від будь-якого стану з попередньої пари запит-відповідь.
Для транспортування конкретної пари запит-відповідь вам потрібен протокол, який здатний перенести довільно великий блок туди і довільно великий блок назад, і для цього над шаром з обмеженим розміром пакету TCP повинен бути репутаційним.
Але через кордон транзакцій, держави немає. Клієнт може перервати з'єднання та встановити новий для наступного запиту. Насправді це був єдиний варіант у ранніх версіях, і він все ще працює так, якщо клієнт не включає Connection: keep-alive
заголовка.
Наступний запит також може бути легко оброблений різним сервером, і клієнт ніколи не дізнається, тому що серверу не потрібно підтримувати будь-який стан (якщо додаток не додає власний стан поверх HTTP, як правило, у формі сеансу; наслідки, що ускладнюються у балансуванні навантаження - це його покарання за побудову державного протоколу на HTTP). Цим скористаються переваги в завантажених серверах з балансування навантаження.
can also easily be handled by different server and the client will never know
Хоча технічно це правда, це вводить в оману, оскільки багато веб-додатків використовують липкі сеанси, що вимагає балансира завантаження для маршрутизації майбутніх запитів з одного сеансу перегляду на той же сервер. З точки зору HTTP, сеанси не мають значення, але ваше останнє словосполучення має на увазі, що для роботи кінцевого користувача це не вплине, що було б помилковим для липких сесій.
Характер HTTP «без громадянства» означає, що на цьому шарі інформація про стан не створюється і не використовується.
Ви можете бачити це в декількох випадках, наприклад, в HTTP-аутентифікації, облікові дані надсилаються з кожним запитом, а стійкі з'єднання - це справді лише оптимізація (тобто, якщо я надсилаю облікові дані, сервер забуде їх після запиту, навіть якщо він залишає з'єднання відкрите).
Навпаки, механізми входу на основі файлів cookie є стаціонарними, але не є частиною HTTP.
Ви повинні розуміти це як набір російських ляльок (або ящиків, якщо ви хочете), кожна з яких несе ще одну, всередині - це приблизно так, як це працює: TCP переносить HTTP «всередину», але це не хвилює його або його функції.
Для отримання цілої картини рекомендую ознайомитись з моделлю OSI, оскільки це робить більш зрозумілим.
TCP сидить на кілька шарів нижче HTTP в моделі OSI, кожен шар насправді відповідає іншому протоколу.
У нашому випадку HTTP знаходиться в шарах презентації та додатків, а TCP - у транспортному шарі. Або якщо ви використовуєте модель TCP / IP, і TCP, і протоколи IP розташовуються в шарі мережевої посилання, а HTTP - у шарах програми та презентації.