Является ли HTTP 1.1 Full duplex?

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

Ответ 1

Посмотрим на стандарт, в данном случае RFC-2616. Там мы находим в пункте 8.1.1, Постоянные соединения:

  - HTTP requests and responses can be pipelined on a connection.
    Pipelining allows a client to make multiple requests without
    waiting for each response, allowing a single TCP connection to
    be used much more efficiently, with much lower elapsed time.

и чуть позже в документе:

8.1.2.2 Pipelining

   A client that supports persistent connections MAY "pipeline" its
   requests (i.e., send multiple requests without waiting for each
   response). A server MUST send its responses to those requests in the
   same order that the requests were received.

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

EDIT: в RFC-7230, часть RFC-набора, который заменяет RFC-2616, будет выглядеть следующим образом:

A client that supports persistent connections MAY "pipeline" its
requests (i.e., send multiple requests without waiting for each
response).  A server MAY process a sequence of pipelined requests in
parallel if they all have safe methods (Section 4.2.1 of [RFC7231]),
but it MUST send the corresponding responses in the same order that
the requests were received.

Ответ 2

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

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

Ответ 3

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

HTTP использует парадигму запроса-ответа, а не полнодуплексную поточную парадигму. Позвольте мне повторить: HTTP - это протокол запроса-ответа! Это означает, что клиент отправляет запрос, а когда полный запрос отправлен, сервер отправляет ответ. Это имеет место, даже если используется так называемый keep-alive, то есть несколько запросов отправляются по одному и тому же TCP-соединению. Поскольку это поведение является основополагающим для протокола, большинство реализаций делают определенные (допустимые) допущения, которые затрудняют создание полнодуплексного соединения.

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