title: Подробное объяснение HTTPS и HTTP2.0
date: 2018-05-21 14:19:31
tags:
- HTTP
- HTTPS
- HTTP2.0
категории: Подробный http
Базовая оптимизация HTTP
На сетевой HTTP-запрос влияют два основных фактора: пропускная способность и задержка.
пропускная способность: Если мы все еще находимся на стадии коммутируемого доступа в Интернет, пропускная способность может стать проблемой, серьезно влияющей на запросы, но теперь сетевая инфраструктура значительно улучшила пропускную способность, мы больше не беспокоимся о пропускной способности, влияющей на скорость сети, тогда только задержка остается.
Задерживать:
- Блокировка браузера (блокировка HOL): браузеры по какой-то причине блокируют запросы. Для одного и того же доменного имени браузер может иметь только 4 подключения одновременно (это может варьироваться в зависимости от ядра браузера).Если максимальное количество подключений браузера превышено, последующие запросы будут заблокированы.
- DNS Lookup: Браузер должен знать IP-адрес целевого сервера, чтобы установить соединение. Система, которая разрешает доменные имена в IP-адреса, называется DNS. Обычно этого можно достичь, используя результаты кэширования DNS, чтобы сократить это время.
- Установить соединение (начальное соединение): HTTP основан на протоколе TCP.Браузер может использовать только сообщение HTTP-запроса в третьем рукопожатии как можно раньше, чтобы установить реальное соединение, но эти соединения нельзя использовать повторно, что приведет к каждому запрос Оба проходят три рукопожатия и медленный старт. Трехстороннее рукопожатие оказывает существенное влияние на сценарии с высокой задержкой, в то время как медленный запуск оказывает большее влияние на запросы больших файлов.
Некоторые различия между HTTP1.0 и HTTP1.1
HTTP1.0 был впервые использован на веб-страницах в 1996 году. В то время он использовался только на некоторых относительно простых веб-страницах и сетевых запросах, в то время как HTTP1.1 начал широко использоваться в текущих основных сетевых запросах браузера в 1999 году. В то же время HTTP1.1 также является наиболее широко используемым протоколом HTTP. Основные отличия в основном отражаются в:
- Обработка кеша.В HTTP1.0 If-Modified-Since и Expires в заголовке в основном используются в качестве критериев для оценки кеша, HTTP1.1 вводит больше стратегий управления кешем, таких как тег Entity, If-Unmodified-Since, If-Match , If-None-Match и другие необязательные заголовки кэша для управления стратегией кэширования.
- Оптимизация пропускной способности и использование сетевых подключений.В HTTP1.0 есть некоторые явления потери пропускной способности.Например,клиенту нужна только часть объекта,но сервер отправляет весь объект и не поддерживает функцию возобновление загрузки.HTTP1.1 вводит в заголовок запроса поле range header, которое позволяет запрашивать только определенную часть ресурса, то есть код возврата 206 (Partial Content), что облегчает свободный выбор разработчиков чтобы в полной мере использовать пропускную способность и соединения.
- Для управления уведомлениями об ошибках в HTTP 1.1 было добавлено 24 кода ответа об ошибке, например 409 (конфликт), указывающий, что запрошенный ресурс конфликтует с текущим состоянием ресурса; 410 (исчез), указывающий, что ресурс на сервере навсегда Сексуальное удаление.
- Обработка заголовка хоста, в HTTP 1.0 считается, что каждый сервер привязан к уникальному IP-адресу, поэтому URL в сообщении запроса не передает имя хоста (имя хоста). Но с развитием технологии виртуальных хостов на физическом сервере может быть несколько виртуальных хостов (многосетевых веб-серверов), и они имеют общий IP-адрес. Сообщение запроса и ответное сообщение HTTP1.1 должны поддерживать поле заголовка узла, и если в сообщении запроса нет поля заголовка узла, будет сообщено об ошибке (400 Bad Request).
- Постоянное соединение, HTTP 1.1 поддерживает постоянное соединение (PersistentConnection) и обработку конвейера запросов (Pipelining), несколько HTTP-запросов и ответов могут быть переданы по одному TCP-соединению, что снижает потребление и задержку при установлении и закрытии соединений, в HTTP1.1 Connection: сохранить -alive включен по умолчанию, что в определенной степени компенсирует недостатки HTTP1.0, заключающиеся в том, что каждый запрос должен создавать соединение.
HTTPS
HTTP имеет следующие проблемы с безопасностью:
- Используйте открытый текст для общения, контент может быть подслушан;
- Без проверки личности общающейся стороны личность общающейся стороны может быть замаскирована;
- Целостность сообщения не может быть доказана, и сообщение может быть изменено.
HTTPS можно понимать как HTTP+SSL/TLS, то есть добавление уровня SSL к HTTP.Основой безопасности HTTPS является SSL, поэтому зашифрованные детали требуют SSL для безопасной передачи данных HTTP.
HTTPS не является новым протоколом, но сначала позвольте HTTP взаимодействовать с SSL (Secure Sockets Layer), а затем SSL и TCP. То есть HTTPS использует для связи туннель.
Используя SSL, HTTPs имеет шифрование (защита от перехвата), аутентификацию (защита от маскировки) и защиту целостности (защита от несанкционированного доступа).
Шифрование с симметричным ключом и шифрование с асимметричным ключом
Шифрование с симметричным ключом
Шифрование с симметричным ключом использует один и тот же ключ для шифрования и дешифрования.
Достоинства: Высокая скорость работы Недостатки: Легко получить ключи.
шифрование с открытым ключом
Шифрование с открытым ключом, также известное как шифрование с асимметричным ключом, использует пару ключей для шифрования и дешифрования, открытый ключ и закрытый ключ. Открытый ключ может быть получен каждым.После того, как отправитель сообщения получит открытый ключ получателя, он может использовать открытый ключ для шифрования, а получатель может использовать закрытый ключ для расшифровки после получения содержимого сообщения.
Преимущества: Безопаснее Недостатки: Медленная работа;
HTTPS использует гибридный механизм шифрования, используя шифрование с открытым ключом для передачи симметричных ключей для обеспечения безопасности, а затем используя шифрование с симметричным ключом для связи для обеспечения эффективности.
Схема:
Проблемы с производительностью HTTPS
- HTTPS замедляет доступ пользователей. SSL-рукопожатие, HTTPS в определенной степени снизят скорость, но если они должным образом оптимизированы и развернуты, влияние HTTPS на скорость вполне приемлемо. Во многих сценариях скорость HTTPS вообще не уступает HTTP, а при использовании SPDY скорость HTTPS даже выше, чем у HTTP.
- По сравнению с HTTPS, который снижает скорость доступа, нужно больше заботиться о нагрузке ЦП на стороне сервера.Вычисление большого количества ключевых алгоритмов в HTTPS потребляет много ресурсов ЦП.Только при достаточной оптимизации стоимость машины HTTPS существенно не увеличится.
Используйте СПДИ
В 2012 году Google как гром предложил решение SPDY, и все начали смотреть и решать проблемы старой версии самого протокола HTTP.Можно сказать, что SPDY — это протокол передачи, который объединяет как HTTPS, так и HTTP. решения:
- Чтобы уменьшить задержку, SPDY элегантно применяет мультиплексирование для решения проблемы высокой задержки HTTP. Мультиплексирование решает проблему блокировки HOL, разделяя TCP-соединение для нескольких потоков запросов, уменьшая задержку и улучшая использование полосы пропускания.
- приоритет запроса. Новая проблема, связанная с мультиплексированием, заключается в том, что оно может привести к блокировке критически важных запросов на основе совместного использования соединения. SPDY позволяет установить приоритет для каждого запроса, чтобы на важные запросы отвечали первыми. Например, когда браузер загружает домашнюю страницу, сначала должно отображаться html-содержимое домашней страницы, а затем загружаются различные статические файлы ресурсов, файлы сценариев и т. д., чтобы пользователи могли видеть содержимое домашней страницы. веб-страницу в первый раз.
- сжатие заголовка. Как упоминалось ранее, заголовки HTTP1.x часто избыточны. Выбор подходящего алгоритма сжатия может уменьшить размер и количество пакетов.
- Передача зашифрованного протокола на основе HTTPS значительно повышает надежность передаваемых данных.
- Сервер push, используя веб-страницу SPDY, например, моя веб-страница имеет запрос sytle.css, когда клиент получает данные sytle.css, сервер будет отправлять файл sytle.js клиенту, когда клиент пытается получить sytle .js, он может получить его прямо из кеша, не отправляя еще один запрос. Схема состава СПДИ:
HTTP2.0
Можно сказать, что HTTP2.0 является обновленной версией SPDY (на самом деле, изначально он был разработан на основе SPDY), но между HTTP2.0 и SPDY все же есть различия, в основном в следующих двух моментах:
- HTTP2.0 поддерживает HTTP-транспорт с открытым текстом, а SPDY использует HTTPS.
- Алгоритм сжатия заголовка сообщения HTTP2.0 использует HPACK вместо DEFLATE, принятого SPDY.
Новые возможности HTTP 2.0
- Новый двоичный формат (Binary Format), синтаксический анализ HTTP1.x основан на тексте. Парсинг формата на основе текстового протокола имеет естественные дефекты Представление текста разнообразно Должно быть много сценариев для рассмотрения робастности Двоичный отличается, распознается только комбинация 0 и 1. Основываясь на этом соображении, при анализе протокола HTTP2.0 было принято решение использовать двоичный формат, который удобен и надежен в реализации.
- Мультиплексирование (MultiPlexing), то есть совместное использование соединения, то есть каждый запрос используется как механизм совместного использования соединения. Запрос соответствует идентификатору, поэтому в соединении может быть несколько запросов, и запросы каждого соединения могут быть случайным образом смешаны вместе. мультиплексирование
- Сжатие заголовков, как упоминалось выше, содержит много информации для упомянутого выше заголовка HTTP1.x, и его приходится каждый раз отправлять повторно, HTTP2.0 использует кодировщик для уменьшения размера заголовка, который необходимо передать. , и обе стороны связи каждый кешируют копию. Таблица полей заголовков не только позволяет избежать передачи повторяющихся заголовков, но также уменьшает размер, который необходимо передать.
- Push-сервер, как и SPDY, HTTP2.0 также имеет функцию push-сервера. В настоящее время на большинстве веб-сайтов включен HTTP2.0, таких как YouTube, Taobao и др. Вы можете использовать консоль Chrome, чтобы проверить, включен ли H2.