предисловие
С момента прихода в новую компанию наша фронтенд-команда занимается этим внутри компании 📖Практика каждый понедельникПлан проверки знаний, который я составил передСтруктуры данных и алгоритмы для еженедельной практикиИзучите содержание, пойдем посмотрим~~
За последние три недели основной обзорОсновы сетиЧто касается связанных знаний, сегодня я собрал знания и справочные ответы, рассмотренные за последние три недели, в эту статью. Я приглашаю друзей учиться друг у друга и давать советы. Я думаю, что эта статья хороша, и добро пожаловать, чтобы она понравилась 💕💕.
Мне особенно нравится текущее еженедельное обучение и обмен, хахаха~~😄
📅Посоветуйте репозиторий на github -"круто-http", содержание отличное.
Примечание: В этой статье организована исходная сеть. Некоторые изображения/абзацы не могут найти источник исходного текста. Если есть какие-либо нарушения, свяжитесь с нами, чтобы удалить их.
1. Кратко опишите, что происходит после того, как браузер вводит URL-адрес
1.1 Описание
- Браузер ищет IP-адрес, соответствующий входному URL-адресу, на DNS-сервере.
- Сервер NS возвращает IP-адрес веб-сайта.
- Браузер устанавливает TCP-соединение через порт 80 с целевым веб-сервером на основе IP-адреса.
- Браузер получает HTML-код запрошенной страницы.
- Браузер отображает HTML в окне дисплея.
- Когда окно закрывается, браузер разрывает соединение с сервером.
1.2 Дополнение к очкам знаний TCP
Справочная статья:«Трехстороннее рукопожатие TCP и протокол четырехсторонней волны»
Для установления TCP требуется три рукопожатия, а для отключения требуется четыре рукопожатия. Весь процесс показан на рисунке ниже:
Трехстороннее рукопожатие TCP:
Так называемое трехстороннее рукопожатие означает, что при установлении TCP-соединения клиент и сервер должны отправить в общей сложности три пакета.Целью трехэтапного рукопожатия является подключение к указанному порту сервера, установление соединение TCP и синхронизировать серийные номера и номера подтверждения обеих сторон. И обмениваться информацией о размере окна TCP. В программировании SOCKET, когда клиент выполняет connect (), он запускает трехстороннее рукопожатие:
ПТС махнул четыре раза:
Удаление TCP-соединения требует отправки четырех пакетов. Либо клиент, либо сервер могут активно инициировать действие помахивания. В программировании SOCKET любая из сторон выполняет close() для создания операции помахивания рукой.
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.
-
Cookie
это небольшой фрагмент данных, хранящийся в клиенте браузера; -
Cookie
Может работать на переднем и заднем плане одновременно; -
Cookie
Может быть доступен на разных страницах; -
Cookie
недоступен между серверами; -
Cookie
Есть ограничения: каждый браузер может хранить не более 300, каждый сервер не может превышать 20, а объем данных не может превышать 4К; -
Cookie
Есть жизненный цикл, по умолчанию такой же, как у браузера, если процесс завершится, куки будут уничтожены
5.2 Session
Сессия хранится на нашем сервере, что позволяет сохранять информацию об операциях пользователя на нашем сервере.
Когда пользователь посещает наш веб-сайт, наш серверSession ID
, затем поставьтеSession ID
сохранить его и положить этоSession ID
Отправьте его нашим пользователям, когда пользователь снова получит доступ к нашему серверу, возьмите этоSession ID就
Это можно проверить, когда этот идентификатор может соответствовать идентификатору, хранящемуся на нашем сервере, мы можем считать его своим.
-
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 Сообщение запроса
Сообщение запроса отправляетсястрока запроса,заголовок запросаа такжетело запросасочинение:
- строка запроса
Формат:
请求方法 + 空格 + 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 Ответное сообщение
Ответное сообщение отправляетсястрока состояния,заголовок ответаа такжетело ответасочинение:
- строка состояния
Формат:
协议版本 + 空格 + 状态码 + 空格 + 状态码描述 + 回车符 + 换行符
Разделение кода состояния:
Коды состояния 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
- увеличить постоянное соединение
То есть несколько запросов и ответов могут использовать одно и то же TCP-соединение вместо создания нового TCP-соединения для каждого запроса и ответа, что снижает потребление и задержку при установлении и закрытии соединений.
Connection: keep-alive
- Добавить конвейерный механизм
С добавлением конвейерного механизма запросы могут отправляться одновременно, но ответы должны возвращаться в том порядке, в котором отправляются запросы, и производительность в определенной степени повышается.
- Передача по частям
В версии HTTP/1.1 нет необходимости ждать полной обработки данных перед возвратом, сервер генерирует какие-то данные, а потом отправляет какие-то данные, очевидно, что этот метод лучше и может сэкономить много времени ожидания.
- Увеличивать
host
поле
Позволяет использовать один сервер для создания нескольких веб-сайтов.
- Сообщение об ошибке
HTTP/1.1 представилWarning
В поле заголовка добавляется описание сообщения об ошибке или предупреждения.Кроме того, в HTTP/1.1 добавлено 24 кода ответа статуса (100, 101, 203, 205, 206, 301, 305...).
- Оптимизация пропускной способности
Представлено в сообщении запроса в 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
- блокировка в начале очереди
Проблема с задержкой сети в этой версии в основном вызвана перегрузкой в начале очереди.Хотя это улучшается за счет постоянных подключений, ответ на каждый запрос по-прежнему необходимо ставить в очередь по порядку.Если предыдущая обработка ответа занимает много времени , это также очень требовательно к производительности.
- незрелая технология
Кроме того, хотя в этой версии и введен механизм пайплайна, в настоящее время есть много проблем, и по умолчанию он закрыт.
- пустая трата ресурсов
Запросы HTTP/1.1 будут нести много избыточной информации в заголовке, тратя впустую много ресурсов полосы пропускания.
8. Какие новые функции HTTP/2.0 по сравнению с HTTP/1.1
Справочная статья:«Сравнение основных характеристик HTTP1.0 HTTP/1.1 HTTP2.0»
- Бинарное кадрирование
Добавьте уровень двоичного кадрирования между прикладным уровнем (HTTP/2.0) и транспортным уровнем (TCP или UDP), чтобы обойти ограничения производительности HTTP1.1 и улучшитьПроизводительность передачи,добиться низкой задержкиа такжевысокая пропускная способность.
Видно, что хотя спецификации между протоколом HTTP/2.0 и протоколом HTTP1.x полностью различаются, фактически HTTP/2.0 не меняет семантику HTTP1.x.
Проще говоря, HTTP/2.0 просто берет исходный HTTP1.x.header
а такжеbody
Частично используетсяframe
Только что перепаковал.
- Мультиплексирование (совместное использование соединения)
Позволяет одновременно отправлять несколько сообщений типа "запрос-ответ" по одному соединению HTTP/2. Эта мощная функция основана на функции "бинарного кадрирования".
Как видно из рисунка, вся связь 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.
С SSL HTTP имеет шифрование, сертификат и защиту целостности HTTPS. Другими словами, HTTP плюс обработка шифрования, аутентификация и защита целостности — это HTTPS.
Основные функции протокола HTTPS в основном зависят от протокола TLS/SSL, а реализация функций TLS/SSL в основном зависит от трех основных алгоритмов:хэш-функция,Симметричное шифрованиеа такжеАсимметричное шифрование, который использует асимметричное шифрование для реализации аутентификации личности и согласования ключа.Алгоритм симметричного шифрования использует согласованный ключ для шифрования данных и проверяет целостность информации на основе хеш-функции.
9.2 Как работает HTTPS
HTTPS на самом деле состоит из двух частей:HTTP + SSL / TLS, то есть в HTTP добавляется слой модулей для обработки зашифрованной информации. Передача информации между сервером и клиентом будет зашифрована TLS, поэтомуПередаваемые данные являются зашифрованными данными.
- Клиент инициирует запрос HTTPS
Введите URL-адрес HTTPS в браузере и подключитесь к порту 443 сервера. Обратите внимание, что в этом процессе клиент отправляет на сервер семейство зашифрованных текстов, которое представляет собой список алгоритмов шифрования, поддерживаемых браузером.
- Конфигурация сервера
Сервер, работающий по протоколу HTTPS, должен иметь набор цифровых сертификатов, которые можно изготовить самостоятельно или применить в организации. Разница в том, что сертификат, выданный вами, должен быть аутентифицирован клиентом, прежде чем вы сможете продолжить доступ, в то время как сертификат, примененный доверенной компанией, не будет отображать всплывающую страницу с подсказкой.
Этот сертификат на самом деле является парой открытого ключа и закрытого ключа.Таким образом можно понять, что открытый ключ является замком, а закрытый ключ является ключом замка.Замок может заблокировать что-то для других, но замок После завершения только ключ, удерживающий замок, может разблокировать и увидеть заблокированное содержимое.
- отправить сертификат
Этот сертификат фактически является открытым ключом, но содержит много информации, такой как центр сертификации, время истечения срока действия и так далее.
- Сертификат разбора клиента
Эту часть работы выполняет клиентский TLS. Сначала он проверяет, действителен ли открытый ключ, например, выдавший его орган, срок действия и т. д. Если обнаружено исключение, появится окно с предупреждением, указывающее, что есть проблема с сертификатом. Если с сертификатом проблем нет, сгенерируйте случайное значение и зашифруйте случайное значение сертификатом.
Обратите внимание на упомянутое выше «обнаружено исключение». Сертификат будет содержать цифровую подпись, которая зашифрована и сгенерирована путем хеширования открытого ключа, имени и другой информации этого сертификата с закрытым ключом органа, выдавшего сертификат. Браузер клиента сначала найдет корневой центр сертификации сертификата и, если это так, расшифрует сертификат, выданный сервером, с помощью открытого ключа корневого сертификата.
- Отправить зашифрованную информацию
Эта часть передает случайное значение, зашифрованное с помощью сертификата. Цель состоит в том, чтобы позволить серверу получить это случайное значение, а затем связь между клиентом и сервером может быть зашифрована и расшифрована с помощью этого случайного значения.
- Информация о расшифровке сервера
После того, как сервер расшифрует с помощью закрытого ключа, он получит случайное значение, отправленное клиентом.На этом процесс асимметричного шифрования завершен.Видно, что TLS использует асимметричное шифрование для реализации аутентификации личности и согласования ключа. Затем содержимое симметрично шифруется с этим значением.
- Передача зашифрованной информации
Эта часть представляет собой информацию, зашифрованную сервером со случайным значением и может быть восстановлена на клиенте.
- Информация о расшифровке клиента
Клиент расшифровывает информацию, отправленную сервером с ранее сгенерированным случайным значением, и получает расшифрованный контент.На этом процесс симметричного шифрования заканчивается.Видно, что симметричное шифрование используется для шифрования отправляемых данных сервером клиенту. В целом процесс, даже если третья сторона отслеживает данные, беспомощна.
10. Общие черты и различия между HTTP и HTTPS
-
Протокол https должен идти в центр сертификации, чтобы подать заявку на сертификат.Как правило, бесплатных сертификатов мало, поэтому требуется определенная плата.
-
http — это протокол передачи гипертекста, информация передается в виде открытого текста, а https — безопасный протокол передачи с шифрованием ssl.
-
http и https используют совершенно разные методы подключения и используют разные порты: первый — 80, а второй — 443.
-
Соединение http очень простое и не имеет состояния; протокол HTTPS — это сетевой протокол, созданный на основе протокола SSL+HTTP, который может выполнять зашифрованную передачу и аутентификацию и является более безопасным, чем протокол http.
11. Что такое перекрестный домен и как решить вопрос о перекрестном домене
Справочная статья:«Внешние общие междоменные решения (полные)»
11.1 Что такое междоменный домен
Междоменный означает, что браузер не может выполнять скрипты с других сайтов. это изПолитика одинакового происхождения браузераРезультатом являются ограничения безопасности, которые браузеры налагают на JavaScript.
- Что такое политика единого происхождения?
Политика одинакового происхождения/SOP (политика единого происхождения) – это соглашение, которое было введено в браузеры компанией Netscape в 1995 году. Это основная и самая основная функция безопасности браузеров. Без единой политики происхождения браузеры уязвимы для XSS. , CSFR и другие атаки. Так называемая гомология означает, что «протокол + доменное имя + порт» одинаковы, даже если два разных доменных имени указывают на один и тот же IP-адрес, они не гомологичны.
- Та же политика происхожденияОграничено следующее поведение:
-
Cookie
,LocalStorage
а такжеIndexDB
Невозможно прочитать -
DOM
а такжеJS
Объект не может быть получен -
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 Разрешение междоменного
-
jsonp
перекрестный домен -
document.domain
+iframe
перекрестный домен -
window.name
+iframe
перекрестный домен -
location.hash
+iframe
перекрестный домен -
postMessage
перекрестный домен - Совместное использование ресурсов между источниками
CORS
-
withCredentials
Атрибуты -
WebSocket
Междоменный протокол -
node
прокси междоменный -
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
: Ресурсы находятся в памяти Обычно в памяти будут храниться скрипты, шрифты и картинки.
имеютпопадание в кеша такжепромах кешаусловие:
13.2 Кэш согласования
Согласовать кешИменно сервер должен определить, доступен ли кэшированный ресурс, поэтому клиент и сервер должны взаимодействовать посредством какой-либо идентификации, чтобы сервер мог судить о том, можно ли кэшировать запрошенный ресурс для доступа.
Обычный сброс включает слабые кеши, игнорируя сильные кеши. Только когда URL-адрес вводится в адресной строке или в избранном, ссылки на ресурсы и т. д., браузер включит сильное кэширование, поэтому иногда, когда мы обновляем изображение или файл js, содержимое страницы все еще старое, но напрямую браузер обращается к этому изображению или файлу и видит что-то новое.
В основном это две группыheader
Поле:Etag
а такжеIf-None-Match
,Last-Modified
а такжеIf-Modified-Since
.
Отправьте запрос на сервер, и сервер определит, нужно ли обращаться к кэшу согласования, по некоторым параметрам заголовка запроса.
имеютпопадание в кеша такжепромах кешаусловие:
13.3 Процесс
Когда браузер инициирует запрос в первый раз, имеется локальный кеш: Когда браузер инициирует запрос в первый раз, локального кеша нет, и запрос отправляется на веб-сервер, сервер отвечает на запрос , и кеш браузера. Процесс выглядит следующим образом:
При первом запросе сервер передает время последнего изменения страницы черезLast-Modified
Идентификатор отправляется сервером клиенту, а клиент фиксирует время модификации, также сервер генерирует Etag и отправляет его клиенту.
Когда браузер снова делает следующий запрос:
14. Пожалуйста, кратко расскажите об алгоритме LRU (наименее недавно использованный)
Справочная статья:«алгоритм LRU»
14.1 Принцип
Алгоритм LRU (наименее недавно использованный, наименее недавно использованный) удаляет данные на основе исторических записей доступа к данным. Основная идея заключается в том, что «если доступ к данным был осуществлен недавно, вероятность доступа к ним в будущем также выше». .
Вот еще мультипликационная картина:
14.2 Реализация
Наиболее распространенной реализацией является использование связанного списка для хранения кэшированных данных.Детальный алгоритм реализован следующим образом:
-
Вставить новые данные в заголовок связанного списка;
-
Всякий раз, когда происходит попадание в кеш (т. е. к данным кеша обращаются), данные перемещаются в начало связанного списка;
-
Когда связанный список заполнен, данные в конце связанного списка отбрасываются.
14.3 Анализ
- частота попаданий
Когда есть горячие данные, эффективность LRU очень высока, но случайные и периодические пакетные операции приведут к резкому падению частоты попаданий LRU и серьезному загрязнению кеша.
- сложность
Простота реализации.
- Стоимость
При попадании вам нужно пройтись по связанному списку, найти индекс блока данных попадания, а затем переместить данные в голову.
Эпилог
В этой статье в основном рассматриваются некоторые базовые знания HTTP/HTTPS, а также знания других версий HTTP, будь то интервью или накопление знаний, это также то, что мы должны понимать как разработчики.
Честно говоря, как фронтенд-разработчик я все еще слишком мало знаю о HTTP/HTTPS, что может быть связано с моим обычным рабочим контентом.
обо мне
Эта статья была впервые опубликована вpingan8787 личный блог, если вам нужно перепечатать, пожалуйста, оставьте свое личное представление
Author | Ван Пинъань |
---|---|
pingan8787@qq.com | |
Продавец | www.pingan8787.com |
pingan8787 | |
Рекомендуемые статьи дня | GitHub.com/Ping An8787/… |
Брошюра ЕС | js.pingan8787.com |