Что это значит, когда говорят, что http не имеет

Я изучаю java для Интернета, и он упоминает, что http не имеет гражданства. что это значит и как это влияет на программирование

Я также изучал структуру spring, и там упоминается, что некоторые beans должны объявляться как внутренние beans по мере их изменения состояния. Что это значит?

Ответ 1

HTTP - фактический транспортный протокол между сервером и клиентом - является "без гражданства", потому что он ничего не помнит между вызовами. КАЖДЫЙ ресурс, доступ к которому осуществляется через HTTP, представляет собой один запрос без поточного соединения между ними. Если вы загружаете веб-страницу с HTML файлом, который внутри него содержит три тега <img>, попадающих на один и тот же сервер, будет установлено и открыто четыре TCP-соединения, четыре передачи данных, четыре соединения закрыты. На сервере нет уровня на уровне протокола, на котором сервер будет знать что-либо о вас, когда вы входите.

(Ну, это правда для HTTP до 1.0 во всяком случае. HTTP 1.1 добавляет постоянные механизмы соединения разного рода из-за неизбежных проблем с производительностью, которые порождает подлинный протокол без гражданства. 't действительно делают HTTP stateful, они просто делают его грязным-без гражданства, а не чистым-без гражданства.)

Чтобы помочь вам понять разницу, представьте, что протокол, такой как Telnet или SSH, был апатридом. Если вы хотите получить список каталогов удаленного файла, вам нужно как одну атомную операцию подключиться, войти в систему, перейти в каталог и выдать команду ls. Когда команда ls завершила отображение содержимого каталога, соединение закроется. Если вам нужно отобразить содержимое определенного файла, вам нужно будет снова подключиться, войти в систему, перейти в каталог и теперь выпустить команду cat. Когда команда, отображающая файл, завершится, соединение снова закроется.

Когда вы смотрите на это так, хотя объектив Telnet/SSH звучит довольно глупо, не так ли? Ну, в некотором смысле это так и в некотором роде это не так. Когда протокол не имеет статуса, сервер может сделать некоторые довольно хорошие оптимизации, и данные могут быть легко распространены. Серверы, использующие протоколы без учета состояния, могут масштабироваться очень эффективно, поэтому, в то время как фактическая передача отдельных данных может быть очень медленной (открытие и закрытие TCP-соединений НЕ дешево!), Общая система может быть очень, очень эффективной и масштабироваться для любого числа пользователей.

Но...

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

Вот несколько ссылок, которые вы можете использовать, чтобы получить более глубокое понимание понятий:

Ответ 2

HTTP является апатридом - это означает, что при использовании HTTP конечная точка не "запоминает" вещи (например, кто вы). У него нет состояния. Это контрастирует с настольным приложением - если у вас есть форма, и вы переходите к другой форме, а затем возвращайтесь назад, состояние сохраняется (пока вы не закрываете приложение).

Обычно для сохранения состояния в веб-приложении используются файлы cookie.

Ответ 3

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

Общим решением является использование файлов cookie HTTP. Другие методы включают сеансы на стороне сервера, скрытые переменные (когда текущая страница является формой) и URL-переписывание с использованием параметров, закодированных в URI, например, /index.php?session_id=some_unique_session_code.

здесь

Ответ 4

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

Этот недостаток HTTP рассматривается в ряде новых технологий, в том числе cookie.

Ответ 5

Когда он сказал, что что-то не имеет статуса, обычно означает, что вы не можете предположить, что сервер отслеживает любое состояние между взаимодействиями.

По умолчанию протокол HTTP принимает сервер, который не имеет статуса. Каждый запрос рассматривается как независимый запрос.

На практике это означает fixed на некоторых серверах (большинство из них), используя cookie отслеживания в запросе, чтобы соответствовать некоторому состоянию на сервере с конкретным клиентом. Это работает, потому что способ работы cookie (они отправляются на сервер при каждом последующем запросе, как только они были установлены на клиенте).

В основном сервер, который не является апатридом, является препятствием для масштабирования. Вам нужно либо убедиться, что вы маршрутизируете все запросы из определенного браузера в один и тот же экземпляр или выполняете бэкэнд-репликацию состояний. Это обычно является ограничивающим фактором при попытке масштабирования приложения.

Есть несколько других решений для отслеживания состояния (см. рельсы зашифрованного состояния cookie), но в основном, если вы хотите расти, вам нужно понять, как избежать отслеживания состояния на сервере:).