протокол без сохранения состояния и протокол с сохранением состояния - PullRequest
30 голосов
/ 30 апреля 2011

Как понять протокол без учета состояния и протокол с сохранением состояния? HTTP - это протокол без сохранения состояния, а FTP - протокол с контролем состояния. Для веб-приложений, требующих большого количества взаимодействий, базовый протокол должен быть с состоянием. Правильно ли мое понимание?

Ответы [ 6 ]

41 голосов
/ 08 октября 2012

HTTP - это протокол без сохранения состояния, другими словами, сервер забудет все, что связано с состоянием клиента / браузера.Хотя веб-приложения сделали его практически похожим на состояние.

Протокол без сохранения состояния можно заставить вести себя так, как если бы он был с состоянием.Это может быть выполнено, если сервер отправляет состояние клиенту, и если клиент отправляет его снова на сервер, каждый раз.

Есть три способа, которыми это может быть выполнено в HTTP:

a) Один из них - куки, и в этом случае состояние отправляется и возвращается в заголовках HTTP.

b) Вторым является расширение URL, в этом случае состояние отправляется как часть URL в качестве ответа.

c) Третье - это «скрытые поля формы», в которых состояние отправляется клиенту как часть ответа и возвращается на сервер как часть скрытых данных формы

МАСШТАБИЛЬНОСТЬ И ВЫСОКАЯ ДОСТУПНОСТЬ

Одной из основных причин, почему HTTP так хорошо масштабируется, является его отсутствие состояния.Протокол без сохранения состояния облегчает проблемы репликации, так как само состояние не нужно хранить на сервере.

Протоколы с сохранением состояния логически сложны для надежной реализации в Интернете.Серверы без сохранения состояния также легко масштабируются, в то время как для серверов с сохранением состояния масштабируемость проблематична.Запрос без сохранения состояния может быть отправлен на любой узел в любое время, хотя с Stateful это не так.

HTTP, поскольку протокол без сохранения состояния повышает доступность для веб-приложений без сохранения состояния, что в противном случае было бы трудно или невозможно реализовать.Если соединение потеряно, состояние не потеряно, простая повторная отправка запроса решит проблему.Запросы без сохранения состояния также кешируются.

подробнее здесь

13 голосов
/ 30 апреля 2011

Поскольку вы спрашиваете о веб-приложении, протокол всегда будет без состояния - протокол для Интернета - http (или https), и это все, что она написала.

Я думаю, что вы 'Вы думаете, обеспечивает механизм состояния в самом веб-приложении.Типичный подход к этому состоит в том, что вы создаете уникальный идентификатор для сеанса пользователя в вашем веб-приложении (сессионный идентификатор той или иной формы является обычной практикой), который передается между браузером и сервером.Обычно это делается с помощью cookie-файла, хотя это может быть сделано, при этом немного больше хлопот зависит от вашей платформы / фреймворка, а также от URL.

Ваш код на стороне сервера хранит информацию о состоянии (опять же,обычно называется сеансом пользователя), однако он хочет использовать sessionID для его поиска.Трафик http просто возвращает идентификатор сессии.Пока этот идентификатор присутствует, каждая http-транзакция полностью независима от всех остальных, следовательно, сам трафик протокола не имеет состояния.

3 голосов
/ 02 февраля 2017

http - это протокол без сохранения состояния. Все веб-приложения не сохраняют состояния.когда запрос отправляется на сервер, между клиентом и сервером устанавливается соединение, сервер получает запрос, обрабатывает запрос и отправляет ответ обратно, и соединение закрывается.если будет отправлен другой запрос, он будет рассматриваться как новый запрос, и новое соединение будет установлено.для того, чтобы сделать http с состоянием.мы используем методы управления сессиями.так что он использует данные, поступающие из предыдущего запроса, при обработке текущего request.ie, он использует то же соединение для серии взаимодействий клиент-сервер.методы управления сессиями: 1. скрытое поле формы 2. печенье 3. сессия 4. перезапись;

2 голосов
/ 18 мая 2017

Ваш вопрос актуален, и да, было бы замечательно, если бы ваши веб-транзакции с вашим банком осуществлялись через соединение с отслеживанием состояния.Увы, HTTP не имеет состояния из-за странной ошибки в FTP и ограничения 12 сокетов в таблице частичных сокетов в BSD 1989 года. Маркус Ранум объяснил все это здесь .

Так что HTTP выбрасываетсостояние, которое он наследует от TCP и должен воссоздать состояние на уровне приложения в виде файлов cookie.Результатом является дрянная интернет-безопасность.

Проект Seif предлагает исправить все это, используя «безопасный JSON поверх TCP».DNS и центры сертификации не требуются.Протокол и seifnode.js закончены и на github с лицензией MIT.

1 голос
/ 08 марта 2018

HTTP не «наследует» от TCP, а использует его для транспорта. HTTP использует TCP для соединения с состоянием, но затем отключается. Позже он подключится снова, если это необходимо. Поэтому, просматривая веб-сайт, вы создаете много разных соединений. Каждое из этих соединений является состоянием, но разговор в целом - нет, поскольку вы сбрасываете соединение с каждым разговором.

По этой ссылке

0 голосов
/ 30 апреля 2011

По сути, да, но у вас нет другого выбора, кроме как использовать HTTP, для которого обслуживаются веб-сайты. Поэтому вам приходится иметь дело с компромиссами, чтобы сделать HTTP с отслеживанием состояния, то есть управлением сессиями.Возможности - это, в основном, передача идентификатора сеанса через каждый вызов в URL-адресе, чтобы вы знали, когда разговариваете с кем-то, о ком говорили ранее, или с помощью файлов cookie, которые достигают той же цели, не загромождая URL-адрес.Тем не менее, большинство современных языков веб-разработки позаботятся об этом за вас;если вы ищете язык по вашему выбору + «управление сессиями», вы должны получить представление о том, как это делается.

...