tgoop.com/system_design_world/130
Create:
Last Update:
Last Update:
Продолжение постов об эволюции HTTP
HTTP/1.1
Новая версия HTTP/1.1 была впервые опубликована в 1997 году в RFC 2068, а в 1999 году стандартизирована в рамках RFC 2616.
HTTP/1.1 собрал в себе много важных доработок:
1️⃣ Новые методы: PUT (создание или обновление ресурса), DELETE (удаление), OPTIONS (параметры соединения), TRACE (трассировка запроса), CONNECT (установка туннеля к серверу), PATCH (частичное обновление, добавлен позже в 2010 году в RFC 5789).
Например, запрос:
TRACE /page HTTP/1.1
Host: example.com
Ответ:
HTTP/1.1 200 OK
Content-Type: message/http
TRACE /page HTTP/1.1
Host: example.com
2️⃣ Виртуальные хосты: до этого на одном IP-адресе мог располагаться только один веб-сайт. Обязательный заголовок Host позволяет использовать несколько веб-сайтов с одним IP-адресом:
POST /path HTTP/1.1
Host: example.com
3️⃣ Постоянные соединения (persistent connections): клиент и сервер HTTP/1.1 по умолчанию поддерживают постоянное соединение (с помощью keep-alive TCP/IP). Каждый новый запрос отправляется через это установленное соединение, что экономит время и ресурсы для каждого запроса.
4️⃣ Множество соединений (simultaneous connections): клиенты могут открывать несколько TCP-соединений к одному серверу, что позволяет параллельно загружать ресурсы и уменьшает время загрузки веб-страниц. В современных браузерах обычно используется до 6 соединений на один сайт.
5️⃣ Передача данных частями (chunked transfer encoding): HTTP/1.1 позволяет отправлять ответы частями, что особенно полезно для динамически генерируемого контента. Например, ответ отправляемый частями:
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
4
Test
7
Message
0
6️⃣ Конвейерная обработка (pipelining): клиент может передавать на сервер несколько запросов, не ожидая ответов. В ожидании получения дополнительных запросов сервер поддерживает соединение открытым в течение настраиваемого интервала (обычно 15 секунд). Это позволяет уменьшить накладные расходы на установление TCP-соединения.
При всех своих нововведениях HTTP/1.1 имел следующие недостатки:
1️⃣ Ограниченная производительность за счет того, что все запросы в рамках одного соединения выполнялись последовательно. Большое количество запросов в одном соединении создает очередь из запросов (request queuing), увеличивая время обработки запроса.
2️⃣ Количество одновременных соединений ограничивалось браузерами, что замедляло работу. При этом множество открытых соединений потребляло много ресурсов.
3️⃣ Head-of-line блокировка, которая возникает, когда задержка в обработке запроса/ответа блокирует обработку последующих запросов/ответов, использующих то же соединение. Такая блокировка возникает, если количество допустимых параллельных запросов в браузере исчерпано, и последующие запросы должны ждать завершения предыдущих.
4️⃣ Запросы имели огромное количество заголовков, которые дублировали друг друга и не сжимались, генерируя большое количество передаваемых данных и снижая производительность.
ℹ️ Эти недостатки были решены в версии HTTP/2.0, о которой мы расскажем в следующий раз!
❔А какие методы HTTP вы используете в своей работе?
Автор: Нина Пакшина
Нина создала свой youtube канал, где выкладывает видео, посвященное языку Go. Подписывайтесь, если актуально.
#Protocols #HTTP
BY System Design World
Share with your friend now:
tgoop.com/system_design_world/130