HTTP - это фактический транспортный протокол между сервером и клиентом - это «без гражданства», потому что он ничего не помнит между сеансами. КАЖДЫЙ Ресурс, доступ к которому осуществляется через HTTP, представляет собой единый запрос без поточного соединения между ними.Если вы загружаете веб-страницу с HTML-файлом, который внутри него содержит три тега <img>
, попадающих на один и тот же сервер, будет установлено и открыто четыре TCP-соединения, четыре передачи данных, четыре соединения закрыты. Существует просто ни одно государство не хранится на сервере в протоколе уровень, который будет иметь сервер ничего знать о вас, как вы вошли.
(Ну, это верно для HTTP до 1,0 при любой скорости. HTTP 1.1 добавляет постоянные механизмы соединения разного рода из-за неизбежных проблем с производительностью, которые порождают поистине безгосударственный протокол. Мы будем игнорировать это на данный момент, потому что они на самом деле не делают HTTP stateful, они просто делают его грязным-без гражданства, stateless.)
Чтобы помочь вам разобраться в различии, представьте, что протокол, такой как Telnet или SSH, был апатридом. Если вы хотите получить список каталогов удаленного файла, вам нужно как одну операцию атома подключиться, войти в систему, перейти в каталог и выдать команду ls
. Когда команда ls
закончила отображение содержимого каталога, соединение закроется. Если вам нужно отобразить содержимое определенного файла, вам нужно будет снова подключиться, войти в систему, перейти в каталог и теперь выпустить команду cat
. Когда команда, отображающая файл, будет завершена, соединение снова закроется.
Когда вы смотрите на него таким образом, хотя объектив Telnet/SSH звучит довольно глупо, не так ли? Ну, в некотором смысле это так и в некотором роде это не так. Когда протокол не имеет статуса, сервер может сделать некоторые довольно хорошие оптимизации, и данные могут быть легко распространены. Серверы, использующие протоколы без сохранения состояния, могут масштабироваться очень эффективно, поэтому, в то время как фактическая передача отдельных данных может быть очень медленной (открытие и закрытие TCP-соединений НЕ дешево!), Общая система может быть очень, очень эффективной и масштабироваться для любого числа пользователей.
Но ...
Почти все, что вы хотите сделать, кроме просмотра статических веб-страниц будет включать в себя сессии и государства. Когда HTTP используется для своей первоначальной цели (обмена статической информацией, такой как научные статьи), протокол без сохранения состояния имеет большой смысл. Когда вы начинаете использовать его для таких вещей, как веб-приложения, интернет-магазины и т. Д., Тогда безгражданство начинает беспокоиться, потому что это по сути своей действия, связанные с состоянием. В результате люди очень быстро придумали способы наложения состояния поверх протокола без гражданства. Эти механизмы включают в себя такие вещи, как куки-файлы, такие как состояние кодирования в URL-адресах, и что сервер динамически запускает данные на основе таких, как скрытые запросы штата, например ... ну, как и вся куча вещей вплоть до более современных таких как веб-сокеты.
Вот несколько ссылок, вы можете следовать, чтобы получить более глубокое понимание понятий:
Дайте нам ссылку на бронирование/бумаги, вы изучаете. Я не понимаю, почему вы объединяете состояние сетевого протокола с состоянием объекта в одном вопросе? Где мы можем найти эту информацию о весенних бобах, о которой вы упомянули? – Ritesh