#http #web #tcp
Вопрос:
Я читал ,что протокол HTTP по умолчанию использует надежные TCP-соединения, и одна из функций HTTP не имеет подключения. Теперь я в замешательстве, как это имеет смысл ? Как он использует TCP и в то же время не имеет подключения, и, как я знаю, TCP ориентирован на подключение
Ответ №1:
HTTP и TCP-это разные вещи. TCP-это протокол транспортного уровня, в то время как HTTP-протокол прикладного уровня. HTTP использует TCP для передачи данных.
ИМО на этом сайте есть хорошее объяснение:
HTTP не имеет подключения: HTTP-клиент, т. е. браузер, инициирует HTTP-запрос, и после выполнения запроса клиент ожидает ответа. Сервер обрабатывает запрос и отправляет ответ обратно, после чего клиент отключает соединение. Таким образом, клиент и сервер знают друг о друге только во время текущего запроса и ответа. Дальнейшие запросы выполняются при новом подключении, например, клиент и сервер являются новыми друг для друга.
Однако Википедия определяет HTTP как безгосударственный:
HTTP-это протокол без состояния. Протокол без сохранения состояния не требует, чтобы HTTP-сервер сохранял информацию или статус о каждом пользователе в течение нескольких запросов. Однако некоторые веб-приложения реализуют состояния или сеансы на стороне сервера, используя, например, файлы cookie HTTP или скрытые переменные в веб-формах.
Основываясь на их объяснениях, эти термины, по-видимому, используются взаимозаменяемо. Однако на самом деле это не так, поскольку используемые версии HTTP позволяют идентифицировать пользователей с помощью файлов cookie и т.д. И создавать постоянные соединения.
Комментарии:
1. Хорошо, это здорово, так что, поскольку HTTP не имеет подключения, это означает, что он похож на UDP, верно ? как на прикладном уровне он не имеет соединений , а на транспортном уровне использует соединение, ориентированное на соединение, вот что меня смущает в HTTP ? не могли бы вы объяснить это более ясно ?
2. Нет, под отсутствием подключения подразумевается, что HTTP-сервер и клиент не распознают друг друга вне запроса, и как только передача завершена, они все забывают. Это больше похоже на определение ситуации распознавания/запоминания, а не сети. Например, клиент запрашивает файл с сервера, сервер говорит: «Хорошо, кто ты и чего ты хочешь?», Затем дает клиенту то, что он хотел, сетевое соединение закрывается, и сервер и клиент забывают друг о друге. Когда те же клиенты запрашивают какой-либо другой файл на том же сервере, сервер снова спрашивает: «Кто вы?»
3. Другим примером может быть, когда вы звоните в службу поддержки клиентов. У вас открыта и подключена телефонная линия, когда вы звоните им, и вы закрываете свой телефонный звонок, когда закончите. И каждый раз, когда вы звоните им (т. е. устанавливаете соединение), они спрашивают ваше имя и что вы хотите.
4. Ну, круто, почему HTTP использует TCP, а не UDP? Не могли бы вы привести такое объяснение с примером?
5. TCP более надежен, чем UDP. TCP создает соединение и гарантирует, что ваши пакеты данных прибудут в том же порядке, в котором вы отправляете. С другой стороны, UDP не создает соединение, никогда не гарантирует, что ваши пакеты прибудут, и может привести к тому, что ваши пакеты потеряются в пути, и вы даже не узнаете об этом. Однако теперь есть HTTP/3, который использует протокол QUIC, который внутренне использует UDP, ( en.wikipedia.org/wiki/HTTP/3 ).