Почему говорится, что "HTTP - это протокол без гражданства"?

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

HTTP имеет постоянные соединения (Keep-Alive), где несколько запросов могут быть отправлены из одного TCP-соединения.

Ответ 1

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

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

Ответ 2

От Wikipedia:

HTTP - это протокол без учета состояния. Протокол без устаревания не требует сервер для сохранения информации или статуса о каждом пользователе для длительность нескольких запросов.

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

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

Что делает протокол безстоящим, так это то, что серверу не требуется отслеживать состояние по нескольким запросам, а не то, что он не может этого сделать, если захочет. Это упрощает контракт между клиентом и сервером и во многих случаях (например, обслуживает статические данные по CDN) минимизирует объем данных, которые необходимо передать. Если серверы должны были поддерживать состояние посещений клиентов, структура выдачи и ответа на запросы была бы более сложной. Как бы то ни было, простота модели является одной из ее главных особенностей.

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Что делает протокол без сохранения состояния, так это то, что в своем первоначальном варианте HTTP является относительно простым протоколом передачи файлов:

  1. сделать запрос на файл с именем URL,
  2. получить файл в ответ,
  3. Отключить.

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

Ответ 7

HTTP не имеет статуса. TCP - это состояние. Существует так называемое "HTTP-соединение", но только "HTTP-запрос" и "HTTP-ответ". Нам не нужно ничего поддерживать, чтобы сделать еще один "HTTP-запрос". Заголовок подключения, который является "keep-alive", означает, что TCP будет повторно использоваться последующими HTTP-запросами и ответами, а не отключать и восстанавливать TCP-соединение все время.

Ответ 8

The HTTP request/response cycle

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

  • Как только веб-сервер отправляет ответ клиентскому браузеру, все о предыдущем взаимодействии забывается.
  • Это, конечно, не тот случай в традиционном настольном приложении, где состояние исполняемого файла чаще всего остается живым и отображается до тех пор, пока пользователь не закроет главное окно приложения.
  • Учитывая это, как веб-разработчик, вы должны принять конкретные меры, чтобы "запомнить" информацию (например, элементы в корзине покупок, номера кредитных карт и домашние адреса) о пользователях, которые в настоящее время вошли на ваш сайт.,
  • (Out of the box) ASP.NET предоставляет множество способов обработки состояния, используя такие методы, как переменные сеанса, файлы cookie и кэш приложения, а также API управления профилями ASP.NET.

Ответ 9

Он не является апатридом. HTTP (обычно) построен поверх TCP, который является состоятельным. Он, как минимум, поддерживает информацию о подключении. Если бы он был построен на UDP, все было бы по-другому.

Говорить, что HTTP-апатрид - это сказать, что компьютерные программы не имеют электроники, потому что компьютеры, которые их размещают, используют электроны. Это вздор. Точно так же вы не можете полностью отделить HTTP от TCP.

layers