Обзор 15 общеизвестных моментов HTTP

HTTP
Обзор 15 общеизвестных моментов HTTP

предисловие

С момента прихода в новую компанию наша фронтенд-команда занимается этим внутри компании 📖Практика каждый понедельникПлан проверки знаний, который я составил передСтруктуры данных и алгоритмы для еженедельной практикиИзучите содержание, пойдем посмотрим~~

За последние три недели основной обзорОсновы сетиЧто касается связанных знаний, сегодня я собрал знания и справочные ответы, рассмотренные за последние три недели, в эту статью. Я приглашаю друзей учиться друг у друга и давать советы. Я думаю, что эта статья хороша, и добро пожаловать, чтобы она понравилась 💕💕.

Мне особенно нравится текущее еженедельное обучение и обмен, хахаха~~😄

📅Посоветуйте репозиторий на github -"круто-http", содержание отличное.

Примечание: В этой статье организована исходная сеть. Некоторые изображения/абзацы не могут найти источник исходного текста. Если есть какие-либо нарушения, свяжитесь с нами, чтобы удалить их.

1. Кратко опишите, что происходит после того, как браузер вводит URL-адрес

1.1 Описание

  1. Браузер ищет IP-адрес, соответствующий входному URL-адресу, на DNS-сервере.
  2. Сервер NS возвращает IP-адрес веб-сайта.
  3. Браузер устанавливает TCP-соединение через порт 80 с целевым веб-сервером на основе IP-адреса.
  4. Браузер получает HTML-код запрошенной страницы.
  5. Браузер отображает HTML в окне дисплея.
  6. Когда окно закрывается, браузер разрывает соединение с сервером.

1.2 Дополнение к очкам знаний TCP

Справочная статья:«Трехстороннее рукопожатие TCP и протокол четырехсторонней волны»

Для установления TCP требуется три рукопожатия, а для отключения требуется четыре рукопожатия. Весь процесс показан на рисунке ниже:

http3

Трехстороннее рукопожатие TCP:

Так называемое трехстороннее рукопожатие означает, что при установлении TCP-соединения клиент и сервер должны отправить в общей сложности три пакета.Целью трехэтапного рукопожатия является подключение к указанному порту сервера, установление соединение TCP и синхронизировать серийные номера и номера подтверждения обеих сторон. И обмениваться информацией о размере окна TCP. В программировании SOCKET, когда клиент выполняет connect (), он запускает трехстороннее рукопожатие:

http1

ПТС махнул четыре раза:

Удаление TCP-соединения требует отправки четырех пакетов. Либо клиент, либо сервер могут активно инициировать действие помахивания. В программировании SOCKET любая из сторон выполняет close() для создания операции помахивания рукой.

http2

2. Введите общие коды состояния HTTP (не менее пяти)

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

1xx: Информация об индикации — указывает, что запрос получен и обработка продолжается.

  • 100 Клиент должен продолжать делать запросы

  • 101 Клиент попросил сервер преобразовать версию протокола HTTP в соответствии с запросом

2xx: Успех — указывает, что запрос был успешно получен, понят, принят.

  • 200 (Успех) Сервер успешно обработал запрос. Как правило, это означает, что сервер обслуживал запрошенную веб-страницу.

  • 201 (Создано) Запрос выполнен успешно, и сервер создал новый ресурс.

  • 202 (Принято) Сервер принял запрос, но еще не обработал его.

3xx: перенаправление — для выполнения запроса необходимо предпринять дополнительные действия.

  • 300 (множественный выбор) Сервер может выполнять различные действия над запросом. Сервер может выбрать действие в зависимости от инициатора запроса (агента пользователя) или предоставить список действий для выбора инициатора запроса.

  • 301 (Перемещено навсегда) Запрошенная веб-страница была окончательно перемещена в новое место. Когда сервер возвращает этот ответ (на запрос GET или HEAD), он автоматически перенаправляет запросчика в новое место.

  • 302 (Временно перемещено). В настоящее время сервер отвечает на запрос с веб-страницы из другого места, но запрашивающая сторона должна продолжать использовать исходное расположение для будущих запросов.

4xx: Ошибка клиента — запрос содержит синтаксическую ошибку или запрос не может быть выполнен.

  • 400 (неверный запрос) Сервер не понимает синтаксис запроса.

  • 401 (Неавторизованный) Запрос требует аутентификации. Сервер может вернуть этот ответ для веб-страниц, требующих входа в систему.

  • 403 (Запретный) Сервер отклоняет запрос.

5xx: ошибка на стороне сервера — серверу не удалось выполнить допустимый запрос.

  • 500 (Внутренняя ошибка сервера) Сервер обнаружил ошибку и не смог выполнить запрос.

  • 501 (еще не реализовано) Сервер не может выполнить запрос. Этот код может быть возвращен, например, когда сервер не распознает метод запроса.

  • 502 (Bad Gateway) Сервер, выступающий в роли шлюза или прокси, получил недопустимый ответ от вышестоящего сервера.

  • 503 (Сервис недоступен) Сервер в настоящее время недоступен (из-за перегрузки или простоя на техническое обслуживание). Обычно это лишь временное состояние.

  • 504 (Время ожидания шлюза) Сервер действует как шлюз или прокси, но своевременно не получил запрос от вышестоящего сервера.

  • 505 (версия HTTP не поддерживается) Сервер не поддерживает версию протокола HTTP, используемую в запросе.

3. Введите общие заголовки HTTP (не менее пяти)

3.1 HTTP-заголовки

Для более полного содержания вы можете просмотреть"Таблица сравнения заголовка ответа HTTP и заголовка запроса"

имя поля заголовка иллюстрировать
Accept Сообщите серверу, какие типы данных поддерживает клиент.
Accept-Charset Сообщите серверу кодировку, используемую клиентом.
Accept-Encoding Сообщите серверу, какие форматы сжатия данных поддерживает клиент.
Accept-Language Сообщите серверу, локаль клиента.
Host Клиент использует этот заголовок, чтобы сообщить серверу имя хоста, к которому он хочет получить доступ.
If-Modified-Since Клиент использует этот заголовок, чтобы сообщить серверу, как долго ресурс кэшируется.
Referer Клиент использует этот заголовок, чтобы сообщить серверу, из какого ресурса он обращается к серверу. (Обычно используется для противоугонной цепи)
User-Agent Клиент сообщает серверу через этот заголовок программную среду клиента.
Cookie Клиент сообщает серверу через голову, что вы можете принести данные на сервер.
Connection Клиент использует этот заголовок, чтобы сообщить серверу, следует ли закрыть или сохранить соединение после запроса.
Date Через этот заголовок клиент сообщает серверу, что текущее время запроса клиента

3.2 Request Header

Справочная статья:"Информация общего заголовка HTTP"

Пример:

Request Header описывать
GET /sample.Jsp HTTP/1.1 строка запроса
Host: www.uuid.online/ Имя целевого домена и номер порта запроса
Origin: http://localhost:8081/ Имя исходного домена и номер порта запроса (при выполнении междоменного запроса браузер автоматически передает эту информацию заголовка)
Referer: https:/localhost:8081/link?query=xxxxx Полный URI запрошенного ресурса
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36 информация о браузере
Cookie: BAIDUID=FA89F036:FG=1; BD_HOME=1; sugstore=0 Файлы cookie под текущим доменным именем
Accept: text/html,image/apng Указывает, что тип данных, который хочет принять клиент, является типом изображения html или png.
Accept-Encoding: gzip, deflate От имени клиента может поддерживать сжатие форматов gzip и deflate.
Accept-Language: zh-CN,zh;q=0.9 Указывает, что клиент может поддерживать язык zh-CN или zh (стоит отметить, что q(0~1) означает вес приоритета, если не написано, то по умолчанию 1, где zh-CN равен 1, zh равен 0,9)
Connection: keep-alive Сообщите серверу, что TCP-соединение, необходимое клиенту, является постоянным соединением.

3.3 Response Header

Справочная статья:"Информация общего заголовка HTTP"

Пример:

Response Header описывать
HTTP/1.1 200 OK строка состояния ответа
Date: Mon, 30 Jul 2018 02:50:55 GMT Время сервера, когда сервер отправляет ресурсы
Expires: Wed, 31 Dec 1969 23:59:59 GMT Более устаревший способ проверки кеша.По сравнению со временем работы браузера (клиента) по прошествии этого времени нет необходимости кешировать (не сверять с сервером).Подходит для веб-страниц с относительно стабильной версией.
Cache-Control: no-cache Самый распространенный способ управления кешем сейчас — это проверка кеша на сервере.
etag: "fb8ba2f80b1d324bb997cbe188f28187-ssl-df" Как правило, это статическая подпись файла, отправляемая статическим сервером Nginx. В случае просмотра без «Отключенного кеша» после получения etag второй запрос того же URL-адреса автоматически приведет к «If-None-Match».
Last-Modified: Fri, 27 Jul 2018 11:04:55 GMT Время последней модификации текущего ресурса, отправленное сервером.В следующем запросе, если время модификации текущего ресурса на сервере больше этого времени, будет возвращено новое содержимое ресурса.
Content-Type: text/html; charset=utf-8 Если возвращаются потоковые данные, мы должны сообщить браузеру этот заголовок, иначе браузер загрузит страницу, и в то же время сообщить браузеру, что это кодировка utf8, иначе могут быть искаженные символы
Content-Encoding: gzip Сообщите клиенту, что ресурс должен быть декодирован с помощью gzip.
Connection: keep-alive Сообщите клиенту, что TCP-соединение сервера также является длинным соединением.

4. Перечислите часто используемые методы HTTP и объясните разницу между запросами GET и POST.

4.1 HTTP Request Method

Справочная статья:"Таблица сравнения методов HTTP-запроса"

В соответствии со стандартом HTTP HTTP-запросы могут использовать различные методы запроса. HTTP1.0 определяет три метода запроса: методы GET, POST и HEAD. HTTP/1.1 добавил пять новых методов запроса: методы OPTIONS, PUT, DELETE, TRACE и CONNECT.

серийный номер метод описывать
1 GET Запросите указанную информацию о странице и верните тело объекта.
2 HEAD Аналогичен запросу на получение, за исключением того, что в возвращаемом ответе нет конкретного содержимого, которое используется для получения заголовка.
3 POST Отправлять данные на указанный ресурс для обработки запросов (например, отправки формы или загрузки файла). Данные включаются в тело запроса. Запросы POST могут привести к созданию новых ресурсов и/или изменению существующих ресурсов.
4 PUT Данные, передаваемые от клиента на сервер, заменяют содержимое указанного документа.
5 DELETE Запрашивает сервер удалить указанную страницу.
6 CONNECT Протокол HTTP/1.1 зарезервирован для прокси-серверов, которые могут изменять подключения к каналам.
7 OPTIONS Позволяет клиентам просматривать производительность сервера.
8 TRACE Повторить запрос, полученный сервером, в основном для тестирования или диагностики.
9 PATCH Сущность содержит таблицу, описывающую отличия от исходного содержимого, представленного URI.
10 MOVE Запрашивает сервер переместить указанную страницу на другой сетевой адрес.
11 COPY Запрашивает сервер скопировать указанную страницу на другой сетевой адрес.
12 LINK Запросите сервер установить связь.
13 UNLINK Отключить ссылку.
14 WRAPPED Позволяет клиентам отправлять инкапсулированные запросы.
15 Extension-mothed На предпосылке не изменяют протокол, могут быть добавлены дополнительные методы.

4.2 Разница между запросами GET и POST

дифференцированный контент GET POST
Нажмите кнопку «Назад/обновить». Нет эффекта Данные будут отправлены повторно (браузер выдаст сообщение «Данные отправлены повторно»)
добавить закладку Могу Не можем
тайник Могу Не можем
Тип кодирования application/x-www-form-rulencoded application/x-www-form-rulencoded or multipart/form-dataПожалуйста, используйте для двоичных данныхmultipartкодирование
запись истории имеют нет
предел длины имеют нет
ограничения типа данных Разрешены только типы символов ASCLll. Без ограничений, разрешены бинарные данные
безопасность Строка запроса будет отображаться на URL-адресе в адресной строке, это небезопасно,Пожалуйста, не отправляйте конфиденциальные данные с помощью запросов GET. Поскольку данные не будут отображаться в адресной строке, а также не будут кэшироваться или сохраняться в истории просмотров, запросы POST безопаснее, чем запросы GET, но это не самый безопасный способ.Если вам нужно передать конфиденциальные данные,Пожалуйста, используйте шифрование данных.
видимость Строка запроса отображается в URL-адресе в адресной строке. Строка запроса не отображается в URL-адресе в адресной строке

5. Расскажите о роли файлов cookie и сеанса и о различиях между ними.

Справочная статья:«Понимание файлов cookie и сеансов за 3 минуты»

5.1 Краткое введение в файлы cookie

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

http4

  • Cookieэто небольшой фрагмент данных, хранящийся в клиенте браузера;
  • CookieМожет работать на переднем и заднем плане одновременно;
  • CookieМожет быть доступен на разных страницах;
  • Cookieнедоступен между серверами;
  • CookieЕсть ограничения: каждый браузер может хранить не более 300, каждый сервер не может превышать 20, а объем данных не может превышать 4К;
  • CookieЕсть жизненный цикл, по умолчанию такой же, как у браузера, если процесс завершится, куки будут уничтожены

5.2 Session

Сессия хранится на нашем сервере, что позволяет сохранять информацию об операциях пользователя на нашем сервере.

Когда пользователь посещает наш веб-сайт, наш серверSession ID, затем поставьтеSession IDсохранить его и положить этоSession IDОтправьте его нашим пользователям, когда пользователь снова получит доступ к нашему серверу, возьмите этоSession ID就Это можно проверить, когда этот идентификатор может соответствовать идентификатору, хранящемуся на нашем сервере, мы можем считать его своим.

http5

  • seesionДанные хранятся на стороне сервера;
  • Каждому сеансу назначается отдельныйsession_id;
  • Долженsession_idпройти черезcookieТелепорт на передний план, по умолчаниюsession_idимя этоPHPSESSIONID;
  • стойка регистрации может видеть толькоSessionизID, и не может быть измененSessionстоимость;
  • использоватьSessionСессия должна быть открыта в первую очередь;
  • Sessionсохранить вSessionмножество$_SESSION;
  • SessionСпособ хранения безопаснее, но еслиSessionСлишком большое количество номеров приведет к снижению производительности сервера;

5.3 разница

Cookie session
определение Файл, в который браузер сохраняет информацию о пользователе, объем хранилища и количество символов ограничены сервер поставитьsessionIDи пользовательская информация, пользовательские операции, записанные на сервере, эти записи называютсяsession
Та же точка используются для хранения информации, связанной с пользователем
место хранения клиент сервер
безопасность Безопасность невысокая, любой может просматривать напрямую Строгий режим

5.4 Объединение двух

  • Хранится на сервере: черезcookieхранить одинsession_id, а затем конкретные данные сохраняются вsessionсередина. Если пользователь уже вошел в систему, серверcookieсохранитьsession_id, в следующий раз, когда вы запросите его снова,session_idПоднимите его, сервер будетsession_idсуществуетsessionПолучитьsessionданные. Вы можете узнать, кто является пользователем, и некоторую информацию о состоянии, сохраненную ранее. Этот профессиональный термин называетсяserver side session.

  • Будуsessionданные шифруются, а затем сохраняются вcookieсередина. Этот профессиональный термин называетсяclient side session.

6. Введите формат сообщения HTTP-запроса и ответного сообщения.

6.1 Сообщение запроса

http6

Сообщение запроса отправляетсястрока запроса,заголовок запросаа такжетело запросасочинение:

  • строка запроса

Формат:

请求方法 + 空格 + URL + 空格 + 协议版本 + 回车符 + 换行符

Например:

GET www.baidu.com HTTP/1.1  

Общие методы запроса: GET, HEAD, PUT, POST, TRACE, OPTIONS, DELETE и методы расширения.

  • заголовок запроса

Формат:

头部字段名 + 冒号(:) + 值 + 回车符 + 换行符

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

И вВ конце заголовка запроса будет пустая строка, указывающий на конец заголовка запроса, эта строка является обязательной.

Типичные заголовки запроса:

заголовок запроса иллюстрировать
Host Адрес сервера, принимающего запрос, который может быть IP-адресом: номер порта или доменное имя.
User-Agent Имя приложения, отправившего запрос
Connection Укажите свойства, связанные с подключением, например Connection:Keep-Alive.
Accept-Charset Указывает формат кодировки, который может быть отправлен сервером уведомлений.
Accept-Encoding Указывает формат сжатия данных, который может быть отправлен сервером уведомлений.
Accept-Language Язык, который может отправлять сервер уведомлений
  • тело запроса

Обычно используется вPOSTметод,GETТело запроса не существует для метода.
POSTМетоды подходят для ситуаций, когда от клиентов требуется заполнить форму. Наиболее часто используемые заголовки запросов, связанные с данными запроса,Content-Typeа такжеContent-Length.

6.2 Ответное сообщение

http7

Ответное сообщение отправляетсястрока состояния,заголовок ответаа такжетело ответасочинение:

  • строка состояния

Формат:

协议版本 + 空格 + 状态码 + 空格 + 状态码描述 + 回车符 + 换行符

Разделение кода состояния:

Коды состояния 100~199 были введены в протокол HTTP/1.1.Код информационного статуса;
Представление кода состояния 200~299успех;
Коды состояния от 300 до 399 относятся кПеренаправление ресурсов;
Коды состояния от 400 до 499 относятся кОшибка запроса клиента;
Коды состояния от 500 до 599 относятся кОшибка сервера;

Общие коды состояния:

код состояния иллюстрировать
200 Успешный ответ
302 Jump, адрес перехода указывается атрибутом location в заголовке ответа (разница между Forward и Redirect в JSP)
400 Запрос клиента имеет синтаксическую ошибку и не может быть распознан сервером.
403 Сервер получил запрос, но отказался предоставить услугу (аутентификация не удалась)
404 Запрошенный ресурс не существует
500 Внутренняя ошибка сервера
  • заголовок ответа

Формат:

头部字段名 + 冒号(:) + 值 + 回车符 + 换行符

Общие заголовки ответа:

заголовок ответа иллюстрировать
Server Название и версия серверного прикладного программного обеспечения
Content-Type Тип тела ответа (это изображение или двоичная строка)
Content-Length Длина тела ответа
Content-Charset Кодировка, используемая для тела ответа
Content-Encoding Формат сжатия данных, используемый телом ответа
Content-Language язык, используемый для тела ответа

7. Каковы преимущества и недостатки HTTP/1.1

Справочная статья:«Сравнение основных характеристик HTTP/1.0 HTTP/1.1 HTTP/2.0»

дляHTTP/1.1, не только унаследовалHTTP1.0Простые функции, но также преодоление многихHTTP1.0проблемы с производительностью.

7.1 Преимущества HTTP/1.1

  1. увеличить постоянное соединение

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

Connection: keep-alive
  1. Добавить конвейерный механизм

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

管道

  1. Передача по частям

В версии HTTP/1.1 нет необходимости ждать полной обработки данных перед возвратом, сервер генерирует какие-то данные, а потом отправляет какие-то данные, очевидно, что этот метод лучше и может сэкономить много времени ожидания.

  1. Увеличиватьhostполе

Позволяет использовать один сервер для создания нескольких веб-сайтов.

  1. Сообщение об ошибке

HTTP/1.1 представилWarningВ поле заголовка добавляется описание сообщения об ошибке или предупреждения.Кроме того, в HTTP/1.1 добавлено 24 кода ответа статуса (100, 101, 203, 205, 206, 301, 305...).

  1. Оптимизация пропускной способности

Представлено в сообщении запроса в HTTP/1.1.rangeПоле заголовка, позволяющее запрашивать только определенную часть ресурса.

в ответном сообщенииContent-RangeПоле заголовка объявляет смещение и длину возвращаемого объекта. Если сервер соответственно возвращает содержимое запрошенной области объекта, код ответа206(Partial Content), что предотвращаетCacheПриняв ответ за полный объект, HTTP/1.1 добавил новый код состояния.100(Continue). Клиент отправляет запрос только с полем заголовка заранее, и если сервер отклоняет запрос из-за разрешений, он возвращает код ответа401(Unauthorized); если сервер получает этот запрос, он возвращает код ответа100, клиент может продолжать отправлять полный запрос с сущностью.

Обратите внимание, что клиенты HTTP/1.0 не поддерживают код ответа 100. Но клиент может включить в сообщение запросаExpectполе заголовка и установить его значение в100-continue.

7.2 Недостатки HTTP/1.1

  1. блокировка в начале очереди

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

  1. незрелая технология

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

  1. пустая трата ресурсов

Запросы HTTP/1.1 будут нести много избыточной информации в заголовке, тратя впустую много ресурсов полосы пропускания.

8. Какие новые функции HTTP/2.0 по сравнению с HTTP/1.1

Справочная статья:«Сравнение основных характеристик HTTP1.0 HTTP/1.1 HTTP2.0»

  • Бинарное кадрирование

Добавьте уровень двоичного кадрирования между прикладным уровнем (HTTP/2.0) и транспортным уровнем (TCP или UDP), чтобы обойти ограничения производительности HTTP1.1 и улучшитьПроизводительность передачи,добиться низкой задержкиа такжевысокая пропускная способность.

http12

Видно, что хотя спецификации между протоколом HTTP/2.0 и протоколом HTTP1.x полностью различаются, фактически HTTP/2.0 не меняет семантику HTTP1.x.

Проще говоря, HTTP/2.0 просто берет исходный HTTP1.x.headerа такжеbodyЧастично используетсяframeТолько что перепаковал.

  • Мультиплексирование (совместное использование соединения)

Позволяет одновременно отправлять несколько сообщений типа "запрос-ответ" по одному соединению HTTP/2. Эта мощная функция основана на функции "бинарного кадрирования".

http11

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

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

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

HTTP1.1 не поддерживаетheaderСжатие данных, HTTP/2.0 используетHPACKПара алгоритмовheaderДанные сжимаются, поэтому объем данных меньше, а передача по сети будет быстрее. Эффективные алгоритмы сжатия могут значительно сжиматьheader, уменьшая количество отправляемых пакетов и тем самым уменьшая задержку.

  • пуш сервера

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

9. Пожалуйста, кратко опишите принцип работы HTTPS

9.1 Введение в HTTPS

Справочная статья:"Подробное объяснение того, как работает HTTPS"

HTTPS не является новым протоколом на уровне приложений. Просто интерфейс связи HTTP заменен протоколами SSL (Secure Socket Layer) и TLS (Transport Layer Security).

Обычно HTTP связывается напрямую с TCP. При использовании SSL он развивался для связи сначала с SSL, а затем SSL связывался с TCP. Короче говоря, так называемый HTTPS — это на самом деле HTTP в оболочке протокола SSL.

http13

С SSL HTTP имеет шифрование, сертификат и защиту целостности HTTPS. Другими словами, HTTP плюс обработка шифрования, аутентификация и защита целостности — это HTTPS.

http14

Основные функции протокола HTTPS в основном зависят от протокола TLS/SSL, а реализация функций TLS/SSL в основном зависит от трех основных алгоритмов:хэш-функция,Симметричное шифрованиеа такжеАсимметричное шифрование, который использует асимметричное шифрование для реализации аутентификации личности и согласования ключа.Алгоритм симметричного шифрования использует согласованный ключ для шифрования данных и проверяет целостность информации на основе хеш-функции.

http15

9.2 Как работает HTTPS

HTTPS на самом деле состоит из двух частей:HTTP + SSL / TLS, то есть в HTTP добавляется слой модулей для обработки зашифрованной информации. Передача информации между сервером и клиентом будет зашифрована TLS, поэтомуПередаваемые данные являются зашифрованными данными.

http16

  1. Клиент инициирует запрос HTTPS

Введите URL-адрес HTTPS в браузере и подключитесь к порту 443 сервера. Обратите внимание, что в этом процессе клиент отправляет на сервер семейство зашифрованных текстов, которое представляет собой список алгоритмов шифрования, поддерживаемых браузером.

  1. Конфигурация сервера

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

Этот сертификат на самом деле является парой открытого ключа и закрытого ключа.Таким образом можно понять, что открытый ключ является замком, а закрытый ключ является ключом замка.Замок может заблокировать что-то для других, но замок После завершения только ключ, удерживающий замок, может разблокировать и увидеть заблокированное содержимое.

  1. отправить сертификат

Этот сертификат фактически является открытым ключом, но содержит много информации, такой как центр сертификации, время истечения срока действия и так далее.

  1. Сертификат разбора клиента

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

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

  1. Отправить зашифрованную информацию

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

  1. Информация о расшифровке сервера

После того, как сервер расшифрует с помощью закрытого ключа, он получит случайное значение, отправленное клиентом.На этом процесс асимметричного шифрования завершен.Видно, что TLS использует асимметричное шифрование для реализации аутентификации личности и согласования ключа. Затем содержимое симметрично шифруется с этим значением.

  1. Передача зашифрованной информации

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

  1. Информация о расшифровке клиента

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

10. Общие черты и различия между HTTP и HTTPS

  1. Протокол https должен идти в центр сертификации, чтобы подать заявку на сертификат.Как правило, бесплатных сертификатов мало, поэтому требуется определенная плата.

  2. http — это протокол передачи гипертекста, информация передается в виде открытого текста, а https — безопасный протокол передачи с шифрованием ssl.

  3. http и https используют совершенно разные методы подключения и используют разные порты: первый — 80, а второй — 443.

  4. Соединение http очень простое и не имеет состояния; протокол HTTPS — это сетевой протокол, созданный на основе протокола SSL+HTTP, который может выполнять зашифрованную передачу и аутентификацию и является более безопасным, чем протокол http.

11. Что такое перекрестный домен и как решить вопрос о перекрестном домене

Справочная статья:«Внешние общие междоменные решения (полные)»

11.1 Что такое междоменный домен

Междоменный означает, что браузер не может выполнять скрипты с других сайтов. это изПолитика одинакового происхождения браузераРезультатом являются ограничения безопасности, которые браузеры налагают на JavaScript.

  • Что такое политика единого происхождения?

Политика одинакового происхождения/SOP (политика единого происхождения) – это соглашение, которое было введено в браузеры компанией Netscape в 1995 году. Это основная и самая основная функция безопасности браузеров. Без единой политики происхождения браузеры уязвимы для XSS. , CSFR и другие атаки. Так называемая гомология означает, что «протокол + доменное имя + порт» одинаковы, даже если два разных доменных имени указывают на один и тот же IP-адрес, они не гомологичны.

  • Та же политика происхожденияОграничено следующее поведение:
  1. Cookie,LocalStorageа такжеIndexDBНевозможно прочитать
  2. DOMа такжеJSОбъект не может быть получен
  3. AjaxНе могу отправить запрос
  • Распространенные междоменные сценарии:

Так называемая гомология означает:доменное имя,протокол,портподобные.

  • http://www.a.cn/index.htmlпередачаhttp://www.a.cn/server.phpНе междоменный.

  • http://www.a.cn/index.htmlпередачаhttp://www.b.cn/server.phpКросс-домен, основной домен отличается.

  • http://abc.a.cn/index.htmlпередачаhttp://def.b.cn/server.phpКроссдоменные, поддомены бывают разные.

  • http://www.a.cn:8080/index.htmlпередачаhttp://www.a.cn/server.phpМеждоменные, разные порты.

  • https://www.a.cn/index.htmlпередачаhttp://www.a.cn/server.phpМеждоменные, разные протоколы.

  • localhostпередача127.0.0.1перекрестный домен.

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

  1. jsonpперекрестный домен
  2. document.domain + iframeперекрестный домен
  3. window.name + iframeперекрестный домен
  4. location.hash + iframeперекрестный домен
  5. postMessageперекрестный домен
  6. Совместное использование ресурсов между источникамиCORS
  7. withCredentialsАтрибуты
  8. WebSocketМеждоменный протокол
  9. nodeпрокси междоменный
  10. nginxпрокси междоменный

Для каждого решения, пожалуйста, обратитесь к:«Внешние общие междоменные решения (полные)»

12. Что такое заголовки, связанные с кешем, в HTTP и в чем их отличия

голова Преимущества и особенности Слабые стороны и проблемы
Expires 1,HTTP 1.0продукт, который можно найти вHTTP 1.0а также1.1Он прост и удобен в использовании. 2. Отметьте время истечения срока действия. 1. Время присылает сервер (UTC), могут возникнуть проблемы, если существует несоответствие между временем сервера и временем клиента. 2. Проблема с версией, и модифицированный клиент до истечения срока действия неизвестен.
Cache-Control 1,HTTP 1.1Продукты, определяющие время отказа во временных интервалах, решаютExpiresПроблемы относительного времени сервера и клиента. 2. СравнитеExpiresУстановлено много других опций. 1,HTTP 1.1только содержание, не относится кHTTP 1.0. 2. Проблема с версией, и модифицированный клиент до истечения срока действия неизвестен.
Last-Modified 1. Проблем с версией нет, и каждый запрос будет отправляться на сервер для проверки. Сервер возвращает 304, если время последней модификации совпадает, и возвращает 200 и содержимое ресурса, если оно отличается. 1. Пока ресурс изменен, независимо от того, существенно ли изменилось его содержимое, ресурс будет возвращен клиенту. Например, периодическая перезапись, когда ресурс содержит практически одни и те же данные. 2. Когда в качестве логотипа указано время, невозможно определить ситуацию, когда в течение одной секунды выполняется несколько модификаций. 3. Некоторые серверы не могут точно получить время последней модификации файла.
ETag 1. Он может более точно определить, был ли изменен ресурс, и может определить ситуацию множественных модификаций в течение одной секунды. 2. Нет проблем с версией, и каждый запрос возвращается на сервер для проверки. 1. РасчетETagЗначение требует потери производительности. 2, в случае распределенного серверного хранилища вычислитьETagЕсли алгоритм другой, это заставит браузер искать содержимое страницы с одного сервера на другой сервер для проверки.ETagнесоответствие.

13. Внедрите надежный кеш и кеш согласования соответственно.

Кэш браузера в основном делится наСильный кеш(также называемыйлокальный кеш)а такжеСогласовать кеш(также называемыйслабый кеш).

13.1 Сильный кеш

Сильный кешэто использоватьhttpв головеExpiresа такжеCache-ControlОн управляется двумя полями и используется для указания времени кэширования ресурсов.

В сильном кеше нормальное обновление будет игнорировать его, но не будет очищено, и потребуется принудительное обновление. Браузер принудительно обновится, и запрос выведетCache-Control:no-cacheа такжеPragma:no-cache.

как правило,Сильный кешНикакой запрос не будет отправлен на сервер, а ресурс будет прочитан непосредственно из кеша. Вы можете видеть, что запрос возвращает код состояния 200 в сетевой опции консоли Chrome. разделен наfrom disk cacheа такжеfrom memory cache.

  • from disk cache: Как правило, в памяти будут существовать не-скрипты, такие как css, html и т. д.

  • from memory cache: Ресурсы находятся в памяти Обычно в памяти будут храниться скрипты, шрифты и картинки.

имеютпопадание в кеша такжепромах кешаусловие:

http17

http18

13.2 Кэш согласования

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

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

В основном это две группыheaderПоле:Etagа такжеIf-None-Match,Last-Modifiedа такжеIf-Modified-Since.

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

имеютпопадание в кеша такжепромах кешаусловие:

http19

http20

13.3 Процесс

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

1

При первом запросе сервер передает время последнего изменения страницы черезLast-ModifiedИдентификатор отправляется сервером клиенту, а клиент фиксирует время модификации, также сервер генерирует Etag и отправляет его клиенту.

Когда браузер снова делает следующий запрос:

2

14. Пожалуйста, кратко расскажите об алгоритме LRU (наименее недавно использованный)

Справочная статья:«алгоритм LRU»

14.1 Принцип

Алгоритм LRU (наименее недавно использованный, наименее недавно использованный) удаляет данные на основе исторических записей доступа к данным. Основная идея заключается в том, что «если доступ к данным был осуществлен недавно, вероятность доступа к ним в будущем также выше». .

http21

Вот еще мультипликационная картина:

http22

14.2 Реализация

Наиболее распространенной реализацией является использование связанного списка для хранения кэшированных данных.Детальный алгоритм реализован следующим образом:

  1. Вставить новые данные в заголовок связанного списка;

  2. Всякий раз, когда происходит попадание в кеш (т. е. к данным кеша обращаются), данные перемещаются в начало связанного списка;

  3. Когда связанный список заполнен, данные в конце связанного списка отбрасываются.

14.3 Анализ

  • частота попаданий

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

  • сложность

Простота реализации.

  • Стоимость

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

Эпилог

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

Честно говоря, как фронтенд-разработчик я все еще слишком мало знаю о HTTP/HTTPS, что может быть связано с моим обычным рабочим контентом.

обо мне

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

Author Ван Пинъань
E-mail pingan8787@qq.com
Продавец www.pingan8787.com
WeChat pingan8787
Рекомендуемые статьи дня GitHub.com/Ping An8787/…
Брошюра ЕС js.pingan8787.com

Публичный аккаунт WeChat

bg