«Интервью» HTTP-протокол

Java HTTP
«Интервью» HTTP-протокол

предисловие

Хр. провел меня в маленькую темную комнату и велел ждать интервьюера здесь.Через некоторое время вошел мужчина средних лет в тапочках, посмотрел на его очень нарядную линию волос и понял, что это, должно быть, интервьюер. Босс, я чувствую давление в моем сердце;

Интервьюер толком этого не скрывал, как только сел, сразу начал бурно выводить.


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

Я: (Эта Нима боится напортачить, поэтому я не писал профи, и это тоже делается. Что будет, конечно, так это отображать веб-страницу, когда у меня быстро крутится мозг, а шея вот-вот сорвется, я наконец думаю, что интервьюер может что-то спросить)

Я: привет красавчик интервьюер!

получить доступhttps://silently9527.cnНапример, сначала браузер посетит DNS-сервер, чтобы узнать IP-адрес, соответствующий доменному имени, а затем браузер посетит IP-адрес; если вы хотите перейти на нижний уровень, он задействует протокол tcp/ ip Division.Layer, дайте мне нарисовать картинку.

Процесс возврата ресурсов с сервера также аналогичен


Интервьюер: Вы только что говорили о многоуровневости tcp/ip, можете ли вы уточнить?

Я: (К счастью, моя бывшая девушка из колледжа не выбросила заметки, которые я делал на занятии. Я только вчера вечером вернулся, чтобы просмотреть их, и я узнал кое-что новое, просматривая старые! Это просто заметка, не надо. не думай!)

Я: Набор протоколов TCP/IP разделен на 4 уровня: прикладной уровень, транспортный уровень, сетевой уровень и канальный уровень.

  • Прикладной уровень: в основном протоколы, используемые для связи с приложениями, такие как: FTP, DNS, HTTP
  • Транспортный уровень: Обеспечивает передачу данных между двумя машинами для прикладного уровня, есть два протокола: TCP, UDP
  • Сетевой уровень: в процессе передачи между двумя машинами будет несколько маршрутов через несколько маршрутизаторов.Сетевой уровень в основном выбирает маршрут из них.
  • Уровень канала передачи данных: используется для работы с аппаратными частями, которые подключаются к сети, такими как сетевые карты, драйверы устройств и т. д.

Интервьюер: Что представляет собой процесс инкапсуляции и распаковки пакетов на уровнях tcp/ip?

Я: В этом многоуровневом режиме каждый сетевой запрос будет обмениваться данными с другой стороной в многоуровневом порядке. Отправитель спускается с уровня приложения, а получатель поднимается с уровня канала передачи данных. Возьмем Http в качестве примера:

  1. Клиент инициирует HTTP-запрос на прикладном уровне (протокол HTTP).
  2. На транспортном уровне (протокол TCP) пакеты данных запроса Http, полученные от прикладного уровня, делятся на небольшие пакеты данных и располагаются в правильном порядке.
  3. Сетевой уровень (IP-протокол) выбирает путь отправки после получения пакета данных.
  4. После того, как сервер получает данные, он отправляет их по порядку, пока прикладной уровень не получит данные.

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


Интервьюер: Как протокол TCP обеспечивает надежную доставку данных к месту назначения?

I: Стратегия трехэтапного рукопожатия, принятая в протоколе TCP.

  • Первое рукопожатие: когда соединение установлено, клиент отправляет пакет синхронизации (syn=j) на сервер и переходит в состояние SYN_SEND, ожидая подтверждения от сервера;
  • Второе рукопожатие: сервер получает син-пакет и должен подтвердить SYN клиента (ack=j+1), и в то же время отправляет SYN-пакет (syn=k), то есть SYN+ACK-пакет, в это время время перехода сервера в состояние SYN_RECV;
  • Третье рукопожатие: клиент получает пакет SYN+ACK от сервера и отправляет на сервер пакет подтверждения ACK (ack=k+1).После отправки пакета клиент и сервер переходят в состояние ESTABLISHED и завершают трехстороннее рукопожатие.


Интервьюер: Почему три рукопожатия вместо двух или четырех?

Я: Предположим, это двустороннее рукопожатие, если клиент сам обрабатывает исключение или сообщение подтверждения, возвращенное сервером, потеряно, то служба поддержки клиентов решит, что установление соединения не удалось, и повторно отправит запрос на установление соединения. , но сервер не знает, думая, что соединение и установлено нормально, в результате чего сервер устанавливает бесполезные соединения и тратит ресурсы

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


Интервьюер: Вы уже сказали три рукопожатия, так что давайте поговорим о четырех волнах, верно?

Я:

  • Клиент отправляет FIN на сервер, который он хочет отключить.
  • Сервер отправляет ACK клиенту, указывая, что он согласен разорвать соединение.
  • Сервер отправляет клиенту FIN, указывающий, что он хочет отключиться.
  • Клиент возвращает серверу ACK, указывающий, что он согласен разорвать соединение.


Интервьюер: Почему для отключения требуется четыре раза, а не три?

Я: Потому что, когда сервер получает запрос клиента на отключение, сервер не может немедленно отключиться, потому что могут быть данные, которые не были отправлены на стороне сервера, поэтому он может только ответить ACK, чтобы указать, что я получил сообщение; ждите на стороне сервера После отправки данных отправьте сообщение FIN, чтобы открыть соединение.После того, как клиент ответит ACK, его можно безопасно отключить.


Интервьюер: Почему вы говорите, что протокол Http является протоколом без сохранения состояния? Как решить протокол Http без сохранения состояния?

Я: Сам протокол HTTP не сохраняет состояние и не сохраняет состояние прямой связи запроса и ответа, поэтому это протокол без сохранения состояния. Поскольку в некоторых сценариях нам необходимо сохранить данные для входа пользователя, для управления состоянием вводятся файлы cookie. Когда клиент запрашивает сервер в первый раз, сервер сгенерирует файл cookie и добавит его в заголовок ответа, и каждый последующий запрос от клиента будет приносить информацию об этом файле cookie.


Интервьюер: В чем разница между файлом cookie и сеансом?

Я:

  • Файлы cookie генерируются сервером, записываются в заголовок ответа на запрос и сохраняются браузером;Set-CookieПоле для установки куки клиенту, атрибуты:
  1. Name=value Установите имя и значение файла cookie.
  2. expires устанавливает срок действия куки
  3. domain=имя домена Указывает, какое доменное имя может действовать только
  4. безопасный означает, что файл cookie может быть отправлен только во время связи по протоколу HTTPS.
  5. HttpOnly означает, что к нему нельзя получить доступ с помощью javascript
  • Сеанс также генерируется сервером, который представляет собой часть памяти на сервере.Каждый клиент соответствует сеансу, и сеансы между клиентами не зависят друг от друга, каждый раз, когда клиент инициирует запрос, он будет приносить куки, который обычно имеет JSESSIONID в нем.Сервер использует этот JESSIONID для поиска соответствующего сеанса клиента, поэтому информация для входа в систему обычных пользователей будет храниться в сеансе; это также решает проблему протокола Http без сохранения состояния

Интервьюер: Какие есть методы запроса в протоколе Http? Как выбрать, какой метод использовать?

Я:

  • GET : получить ресурсы, поэтому операции запроса обычно используют GET
  • POST: передать тело объекта, создать операцию обновления с помощью POST
  • ПОСТАВИТЬ: передать файл
  • HEAD: Получить заголовок сообщения. Если вы хотите запросить информацию о заголовке запроса, вы можете использовать этот метод.
  • DELETE: удалить ресурсы, поэтому операции удаления используют DELETE
  • ВАРИАНТЫ: Спросите сервер, какие методы поддерживаются, и верните Разрешить: GET, POST, HEAD в заголовке ответа.
  • TRACE: путь трассировки, установите число в поле Max-Forwards в заголовке запроса, число уменьшается на единицу каждый раз, когда оно проходит через сервер, и возвращается непосредственно, когда оно достигает 0. Как правило, этот метод используется для проверки отправленный запрос был подделан

Интервьюер: Как Http реализует постоянные соединения?

Я: (Йо Сянь, я всего лишь джуниор-программист, который пришел на собеседование по Java, почему ты все время трешься об меня с Http?! Но ничего страшного, я очень худой, я снова узнаю этот вопрос) Я: На заре существования протокола HTTP соединение tcp отключалось каждый раз, когда выполнялась HTTP-связь. В то время передаваемый контент был небольшим и приемлемым. Теперь каждая веб-страница обычно содержит большое количество изображений и каждый запрос будет вызывать TCP-соединение, подключение и отключение, увеличивая накладные расходы на связь.

Чтобы решить эту проблему, мы придумали метод постоянного соединения, также называемого keep-alive.Пока один конец не предложит отключиться, он будет сохранять состояние TCP-соединения. Постоянные соединения позволяют клиентам одновременно отправлять несколько запросов, не дожидаясь ответов один за другим.


Интервьюер: Как реализовано возобновление больших файлов?

Я: В заголовке HTTP-запроса есть поле «Диапазон»; если мы столкнемся с прерыванием сети при загрузке файла, это приведет к потере времени, если мы перезапустим загрузку, чтобы мы могли возобновить загрузку с последнего прерывания; конкретная операция:

Range: bytes=5001-10000

Или укажите все данные после 5001

Range: bytes=5001-

В ответ возвращается код состояния 206.


Интервьюер: Только что вы упомянули коды состояния.Каковы общие коды состояния протокола Http?

Я: (Интервьюер, я забыл написать это в своем резюме, я был ученым с хорошей памятью и никогда не терял одобрения)

Я: Коды состояния HTTP в основном делятся на четыре категории:

  • 2xx: код состояния успеха, указывающий, что запрос обработан нормально
  • 3xx: код состояния перенаправления, указывающий, что для выполнения запроса требуются дополнительные операции.
  • 4xx: код состояния ошибки клиента
  • 5xx: код состояния ошибки сервера.

Общие коды состояния: 200 (запрос обрабатывается нормально), 204 (запрос обрабатывается успешно, но ресурс не возвращается), 206 (указывает, что клиент сделал запрос диапазона, а ответное сообщение содержит Content-Range) , 301 (постоянная).Сексуальная переадресация, запрошенный ресурс присваивается новому адресу), 302 (временная переадресация, ожидается, что пользователь запросит новый адрес), 400 (ошибка сообщения запроса клиента, обычно ошибка параметра), 401 ( client Unauthenticated error), 403 (нет прав на доступ к ресурсу), 404 (запрошенный ресурс не найден), 405 (этот метод запроса не поддерживается, если сервер поддерживает GET, этот код ошибки появится, когда клиент запрашивает POST), 500 (исключение сервера), 503 (сервер не может предоставить услугу)

Я: (Я это помню, поставь лайк) (Я безумно намекнул, что моим братьям это нравится, не занимайтесь проституцией даром)


Интервьюер: Из каких частей состоит HTTP-сообщение?

Я: Типы сообщений делятся на два типа: сообщения-запросы и сообщения-ответы;

  • Сообщение запроса состоит из трех частей:
  1. Строка запроса: содержит метод запроса, URI, информацию о версии HTTP.
  2. поля заголовка запроса
  3. объект содержимого запроса
  • Ответное сообщение состоит из трех частей:
  1. Строка состояния: содержит версию HTTP, код состояния, фразу причины для кода состояния.
  2. поля заголовка ответа
  3. Сущность содержимого ответа

Интервьюер: Какие проблемы с Http и что такое HTTPS?

я: проблема с http

  • Общение не зашифровано в виде обычного текста, и его содержимое может быть перехвачено.
  • Не проверяет личность корреспондента, может быть замаскирован
  • Целостность сообщения не может быть проверена и может быть изменена

HTTPS — это HTTP плюс обработка шифрования SSL (обычно защищенная линия связи SSL) + аутентификация + защита целостности


Интервьюер: Как HTTPS обеспечивает безопасность данных?

Я: Прежде всего, нам нужно поговорить о двух механизмах шифрования.

  • Симметричное шифрование: и клиент, и сервер используют один и тот же ключ для шифрования, что более эффективно.
  • Асимметричное шифрование: делится на открытый ключ и закрытый ключ.Открытый ключ может передаваться по сети.Содержимое, зашифрованное открытым ключом, может быть расшифровано только закрытым ключом, что неэффективно.

Из-за особых характеристик этих двух видов шифрования HTTPS использует смешанный механизм шифрования, асимметричное шифрование используется на этапе обмена ключами, а симметричное шифрование используется на этапе установления связи и обмена сообщениями.

получить доступsilently9527.cnПример

  1. Браузер инициирует запрос к серверу, а сервер возвращает сертификат и ключ после получения запроса
  2. Браузер проверяет, является ли сертификат законным для стороннего центра сертификации. Если он не является законным, в браузере появится всплывающая страница с предупреждением, позволяющая пользователю выбрать, продолжать ли доступ
  3. Если сертификат действителен, браузер генерирует случайную строку, шифрует ее с помощью открытого ключа и отправляет на сервер, сервер использует закрытый ключ для расшифровки случайной строки, а сервер использует случайную строку для шифрования содержимого и вернуть его клиенту
  4. После этого и клиент, и сервер будут выполнять симметричное шифрование через случайную строку


Интервьюер: Зачем вам центр сертификации сертификатов, без https он небезопасен?

Я: Хотя https можно зашифровать, потому что запрос все равно можно перехватить, как сообщить клиенту, что открытый ключ, возвращенный самому себе, принадлежит реальному серверу, а не злоумышленнику, для этого требуется проверка валидности сертификата, поэтому необходимо ввести сторонний орган по сертификации. Обычно для подачи заявки на покупку https-сертификата необходимо обратиться в стороннее агентство.Если это https-сертификат, сгенерированный нами, браузер проверит его, но появится предупреждение.


Интервьюер: Как браузер обеспечивает безопасность процесса проверки сертификата?

Я: Браузер также использует асимметричное шифрование в процессе проверки сертификата в центре сертификации.Безопасно передать открытый ключ клиенту очень сложно, поэтому разработчик браузера обычно внутренне имплантировал открытые ключи часто используемых центров сертификации.


Интервьюер: С протоколом, связанным с http, все в порядке, давайте продолжим разговор о Java.....

Как новичок, вы можете дожить до этого момента, и вы не можете не поставить себе лайк!


Пишите до конца (обратите внимание, не потеряйтесь)

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

В тексте может быть больше или меньше недостатков и ошибок.Если у вас есть предложения или мнения, вы можете их комментировать и обмениваться.

Наконец,Проституция нехороша, творить нелегко, я надеюсь, что мои друзья могутНравится Комментарий ПодписатьсяСанлян, потому что это все источники мотивации, которыми я могу поделиться🙏

Ссылка: «Иллюстрированный HTTP»