RST_STREAM кадр в HTTP2
Я прочитал о новой функции в http2 RST_STREAM:
HTTP / 2 добавляет фрейм RST_STREAM, чтобы позволить клиенту передумать; если браузер уходит со страницы или пользователь отменяет загрузку, он может избежать необходимости открывать новое соединение, не тратя всю эту пропускную способность.
Как это сделать? Как браузер может это сделать? Есть ли какие-либо изменения в коде?
1 ответ
Браузер инициирует запрос, а затем передумывает, либо пользователь уходит, либо отменяет его.
В HTTP/1.1 единственным способом избежать загрузки содержимого ответа было закрытие соединения, поскольку у клиента нет возможности сообщить об этом намерении прервать запрос на сервер. Закрытие соединения является способом.
В HTTP/2, если клиент хочет прервать запрос, он отправляет RST_STREAM. Когда сервер получает RST_STREAM, он прекращает отправку кадров DATA клиенту, тем самым останавливая ответ (или загрузку). Соединение все еще можно использовать для других запросов, и запросы / ответы, которые были параллельны тому, который был прерван, могут продолжать выполняться.
Как правило, приложениям не нужно ничего делать и они не знают о RST_STREAM, все это делается браузером и реализацией сервера.
Вполне возможно, что к тому времени, когда RST_STREAM пройдет от клиента к серверу, весь контент запроса будет в пути и поступит к клиенту, который его отбросит. Однако для большого содержимого ответа отправка RST_STREAM может иметь хорошие шансы прибыть на сервер до отправки всего содержимого ответа и, следовательно, сэкономить пропускную способность.