Почему говорится, что "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 является относительно простым протоколом передачи файлов:
- сделать запрос на файл с именем URL,
- получить файл в ответ,
- Отключить.
Не было никакой связи между одним соединением и другим, даже от одного и того же клиента. Это упрощает контракт между клиентом и сервером и во многих случаях сводит к минимуму объем данных, которые необходимо передать.
Ответ 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]()