Допустимы ли множественные ответы в HTTP? - PullRequest
0 голосов
/ 09 ноября 2018

Я немного устала от нюансов протокола HTTP и мне интересно, может ли он поддерживать публикацию / подписку напрямую?

HTTP - протокол ответа на запрос. Клиент отправляет запрос, а сервер отправляет ответ. В HTTP 1.0 новое соединение было установлено для каждого запроса. Теперь HTTP 1.1 улучшил HTTP 1.0, позволив клиенту держать соединение открытым и делать несколько запросов.

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

Например, если я запрашиваю ресурс "http://somewhere.com/fetch/me/slowly"

Свободен ли сервер, чтобы ответить дважды дважды? Такие, как первый с 202 принято а затем вскоре с содержанием, когда оно будет готово, но без предварительной отправки клиентом дополнительного запроса?

1012 * т.е. *

Client: GET http://somewhere.com/fetch/me/slowly
Server: 202 "please wait..."
Server: 200 "here's your document"

Было бы правильно внедрить службу публикации / подписки таким образом? Например:

Client: http://somewhere.com/subscribe
Server: item 1
...
Server: item 2

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

Однако, если вы используете chunked Transfer Encoding, это будет работать.

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

Я не видел много дискуссий по этому поводу в отношении pub / sub, так что, если что-то не так с использованием простого HTTP / 1.1 с или без чанкованного кодирования?

Если это работает, зачем вам такие вещи, как RSS или ATOM?

1 Ответ

0 голосов
/ 09 ноября 2018

HTTP-запрос может иметь несколько «ответов», но все ответы имеют коды состояния в диапазоне 1xx, такие как 102 Обработка .

Однако эти ответы - только заголовки, а не тела.

HTTP / 1.1 (как и 1.0 перед ним) - это протокол запрос / ответ . Отправка ответа без запроса не допускается. HTTP / 2 - это протокол кадров, который добавляет push-сервер , который позволяет серверу предлагать дополнительные данные и обрабатывать несколько запросов параллельно, но не меняет природу запросов / ответов.

Возможно сохранить соединение HTTP открытым и продолжать посылать больше данных. Многие (аудио, видео) службы потоковой передачи будут использовать это.

Однако это выглядит как непрерывное тело, которое продолжает потоковую передачу, а не как множество множественных HTTP-ответов.

Если это работает, зачем вам такие вещи, как RSS или ATOM

Поскольку сохранение TCP-соединения открытым не является бесплатным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...