Резюме: HTTP-протокол

Архитектура Сетевой протокол
Резюме: HTTP-протокол

Это 20-й день моего участия в Gengwen Challenge, пожалуйста, проверьте подробности мероприятия:Обновить вызов

Если ❤️моя статья оказалась полезной, ставьте лайк и подписывайтесь. Это самый большой стимул для меня продолжать техническое творчество. [Другие серии статей в моем блоге]coderdao.github.io/

Резюме: HTTP-протокол

Если вы хотите войти в должность интернет-технологий, тоHTTPЭто то, с чем мне приходится сталкиваться почти каждый день, но я обнаружил, что большинство людей имеют только представление о HTTP, они не понимают более подробной информации и принципов и чувствуют себя очень сложно во время собеседования.

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

GET/POST разница?

  • от缓存С точки зрения GET-запросы будут активно кэшироваться браузером, оставляя исторические записи, в то время как POST-запросы не будут по умолчанию.
  • от编码GET может быть закодирован только в URL-адресе и может принимать только символы ASCII, в то время как POST не имеет ограничений.
  • от参数С точки зрения, Get обычно помещается в URL, поэтому он не безопасен, и пост помещается в тело запроса, что более подходит для передачи конфиденциальной информации.
  • от幂等性Угол,GETда幂等, покаPOSTнет. (幂等При одинаковых условиях один запрос и повторные запросы оказывают одинаковое влияние на ресурсы одной и той же системы)
  • отTCPС точки зрения, запрос GET будет отправлять сообщение запроса за один раз, в то время как POST будет разделен на два TCP-пакета, сначала будет отправлена ​​часть заголовка, если сервер ответит 100 (продолжить), затем тело часть будет отправлена. (Fire FoxЗа исключением браузера, его POST-запрос отправляет только TCP-пакет)

За исключением GET и POST,http/1.1Указаны следующие методы запроса:

  • GET: обычно используется для получения ресурсов
  • HEAD: Получить метаинформацию о ресурсе
  • POST: отправленные данные, загрузить данные
  • ПОСТАВИТЬ: изменить данные
  • УДАЛИТЬ: удалить ресурс (почти никогда не используемый)
  • CONNECT: установить туннель подключения для прокси-сервера
  • ВАРИАНТЫ: Перечислите методы запросов, которые можно выполнять с ресурсом для междоменных запросов.
  • TRACE: трассировка пути передачи запроса-ответа

HTTP 1.0, 1.1, 2.0 разница

HTTP 1.0:

Суммировать:

  • Нет соединения
  • нет статуса

Впервые он был использован на веб-страницах в 1996 году, и его содержание простое. Каждому запросу браузера необходимо установить TCP-соединение с сервером, причем сервер разрывает TCP-соединение сразу после обработки (нет соединения), и сервер не отслеживает каждого клиента и не записывает прошлые запросы (без сохранения состояния).

HTTP 1.1:

Суммировать:

  • Настойчивое соединение по умолчанию
  • конвейерная обработка запросов
  • Добавлена ​​обработка кеша (новые поля, такие как управление кешем)
  • Увеличьте поле Host, поддержите передачу точки останова и т. д. (разделите файл на несколько частей)

Широко используемый в 1999 году, Connection: close используется по умолчанию в HTTP/1.0. В HTTP/1.1 Connection: keep-alive используется по умолчанию, что позволяет избежать накладных расходов на установление и освобождение соединения. Однако сервер должен отвечать на результаты последовательно в соответствии с запросом клиента, чтобы клиент мог различать содержимое ответа каждого запроса. Поле Content-Length используется для определения того, были ли получены все данные текущего запроса. Несколько параллельных ответов одновременно не допускаются.

HTTP 2.0:

Суммировать:

  • Кадрирование двоичной параллельной передачи
  • мультиплексирование
  • сжатие заголовка
  • пуш сервера

HTTP/2 вводит концепцию кадров и потоков двоичных данных, где кадры последовательно идентифицируют данные, как показано ниже.

  • stream - двунаправленный поток байтов по установленному соединению
  • сообщение - полная последовательность кадров данных, соответствующих логическим сообщениям
  • Кадр — наименьшая единица связи HTTP2.0, каждый кадр содержит заголовок кадра и, по крайней мере, идентифицирует поток (идентификатор потока), к которому принадлежит текущий кадр.

каждый запрос - это данные, поток данных начинается с消息способ отправки, и сообщение разделено на несколько, заголовок кадра записываетstream idОн используется для идентификации потока данных, к которому он принадлежит.Кадры из разных семейств могут случайным образом смешиваться друг с другом в соединении. Получатель может переназначить кадр различным запросам в соответствии с идентификатором потока.

Мультиплексирование:

1. Вся связь HTTP 2.0 осуществляется через одно TCP-соединение, которое может передавать любое количество двунаправленных потоков данных.

2. Каждый поток данных отправляется в виде сообщения, состоящего из одного или нескольких кадров. Кадры могут отправляться не по порядку, а затем собираться заново на основе идентификатора потока в заголовке каждого кадра.

Например, каждый запрос представляет собой поток данных.Поток данных отправляется в виде сообщения, и сообщение делится на несколько кадров.Идентификатор потока записывается в заголовке кадра, чтобы идентифицировать поток данных, к которому он принадлежит. Случайно намешано в соединении. Получатель может переназначить кадр различным запросам в соответствии с идентификатором потока.

3. Кроме того, мультиплексирование (совместное использование соединения) может привести к блокировке важных запросов. В HTTP 2.0 для каждого потока данных можно установить приоритет и зависимости.Поток данных с высоким приоритетом будет преимущественно обрабатываться сервером и возвращаться клиенту.Поток данных также может зависеть от других потоков подданных.

4. Видно, что HTTP2.0 реализует настоящую параллельную передачу, которая может выполнять любое количество HTTP-запросов по одному TCP. И эта мощная функция основана на функции «бинарного кадрирования».

сжатие заголовка

В HTTP 1.x метаданные заголовка отправляются в виде обычного текста, который обычно добавляет 500–800 байт полезной нагрузки к каждому запросу.

HTTP2.0 использует кодировщик для уменьшения размера передаваемых заголовков.Обе стороны кэшируют таблицу полей заголовков, что не только позволяет избежать повторной передачи заголовков, но и уменьшает передаваемый размер. Эффективные алгоритмы сжатия могут значительно сжимать заголовки, уменьшая количество отправляемых пакетов и тем самым уменьшая задержку.

Пуш сервера:

В дополнение к ответу сервера на первоначальный запрос сервер также может передавать дополнительные ресурсы клиенту без явного запроса клиента.

Разница между HTTP и HTTPS

Введение в HTTPS

HTTPS действительно решаетHTTP为明文发送内容,不利于敏感数据, а к HTTP добавлен протокол SSL. SSL использует сертификаты для проверки подлинности сервера и шифрования связи между браузером и сервером.

Основные функции протокола HTTPS можно разделить на два типа:

  • положение信息安全通道, для обеспечения безопасной передачи данных;
  • сайт подтверждения真实性.

разница

  • По сравнению с HTTP HTTPS добавил слой SSL, и вам нужно подать заявку на сертификат от CA (заряженные),
  • HTTPS относится к HTTP-аутентификации (когнитивный пользователь, сервер), а данные шифруются. Предотвратите кражу и изменение данных.
  • Текущая архитектура самая безопасная, но занимает много времени, а кеш не очень.
  • https использует порт 443, http использует порт 80. Примечание совместимо с http и https

Процесс передачи HTTPS

图片描述Предварительные условия: Сервер генерирует открытый и закрытый ключи TLS/SSL. Дайте открытый ключ ЦС для выпуска сертификата с открытым ключом.

  1. Клиент инициирует запрос HTTPS в соответствии с положениями RFC2818, клиент должен знать соединение 443 (по умолчанию) портур сервера.
  2. Сервер имеет предварительно настроенную пару ключей (открытый ключ, закрытый ключ), и здесь возвращает сертификат открытого ключа клиенту.
  3. Клиент проверяет сертификат открытого ключа: например, находится ли он в пределах срока действия, предназначен ли сертификат для соответствия сайту, запрошенному клиентом, находится ли он в списке отзыва CRL, является ли его сертификат верхнего уровня действителен, это рекурсивный процесс, пока не будет достигнута проверка Корневой сертификат (встроенный Корневой сертификат операционной системы или встроенный Корневой сертификат Клиента). Если проверка пройдена, продолжайте, в противном случае появится предупреждающее сообщение.
  4. Клиент использует генератор псевдослучайных чисел для генерации сеансового ключа, используемого для шифрования, а затем шифрует сеансовый ключ с помощью открытого ключа сертификата и отправляет его на сервер.
  5. Сервер расшифровывает сообщение своим закрытым ключом и получает сеансовый ключ. На данный момент и клиент, и сервер имеют один и тот же сеансовый ключ.
  6. Сервер использует сеансовый ключ для шифрования «незашифрованного содержимого A» и отправляет его клиенту.
  7. Клиент расшифровывает зашифрованный текст ответа с помощью сеансового ключа и получает «открытый текст A».
  8. Запрос клиента HTTPS снова инициирован снова, использование запроса ключей зашифрованного сеанса «CLEAR CONTENT B», SERVER, SERVER использует ключ сеанса для расшифровки зашифрованного текста для получения «четкого содержимого B».

Процесс ввода URL для рендеринга страницы

Всего за 6 шагов:

  • Введите URL
  • Разрешение доменного имени DNS
  • установить TCP-соединение
  • Отправьте HTTP-запрос, сервер обрабатывает запрос и возвращает результат ответа.
  • закрыть TCP-соединение
  • рендеринг в браузере

Что именно делает каждый шаг? Также есть следующие ответы:

Разрешение доменного имени DNS

Суть: поставить доменное имяjuejin.cnпревратить в бетонIP地址

Сценарий приложения: если данные запроса сканера пусты, вы можетеpingПросто запросите доменное имя. может ли он быть успешным.图片描述 www.baidu.comявляется удачным примером;www.juejin.cnможет быть禁止ping/ Привязанные хосты / Сайт виснет и тд. Это можно комбинироватьcurl / 浏览器访问...и другие методы в сочетании с суждением

Идет процесс разрешения DNS浏览器,本地DNSмежду递归查询Если вы не можете найти его本地DNSа также根域服务器,顶级域名服务器,权威域名服务器между迭代查询;

Отправьте HTTP-запрос, сервер обрабатывает запрос и возвращает результат ответа.

После установления TCP-соединения браузер может отправлять запросы на сервер по протоколу HTTP/HTTPS. Когда сервер получает запрос, он анализирует заголовок запроса. Если заголовок содержит информацию, связанную с кешем, такую ​​как if-none-match и if-modified-since, он проверит, действителен ли кеш, и вернет код состояния 304. .

Если это 301/302, это означает, что сервер сменил доменное имя и его необходимо перенаправить.В это время сетевой процесс прочитает адрес перенаправления из поля Location заголовка ответа, а затем инициирует новый HTTP-запрос. или HTTPS-запрос и перейдите к шагу 4. Если это 200, проверьте поле Content-Type.Если значение text/html, это означает HTML-документ, а если это application/octet-stream, это означает загрузку файла;