🐲【1】ShutdownHTTP Series - Основы

HTTP JavaScript
🐲【1】ShutdownHTTP Series - Основы

Введение в серию Shutdown HTTP

Раньше один здоровяк сказал мне такую ​​фразу: «Интернет-знания в определенной степени определяют ваш верхний предел».

Я не очень разбираюсь в HTTP, неужели верхний предел настолько низок... Можно я просто на минутку разберусь с этим 🤔️?

Пожалуйста, дайте Лин Дуану шанс на этот раз и следуйте по моим стопам👣, чтобы научиться этому с 1. Кроме того, составленная мной серия HTTP будет в основном иметь соответствующий ответ для поверхностного ответа и подробного ответа во время интервью.Поверхностный ответ предназначен для того, чтобы вы лучше запомнили, а глубокий ответ гарантирует, что вы действительно понимаете основные моменты в поверхностный ответ.

Отключив всю серию, давайте полностью отключим HTTP! ! ! 💪

Серия ментальных карт:

Каталог серий:

  • "🐲【1】Серия Shutdown HTTP - Основы" "Эта статья"
  • 《🐲【2】Отключение сообщений HTTP Series-HTTP》
  • "🐲【3】Shutdown HTTP Series-Cookie Chapter"
  • "🐲 【4】 Выключение HTTP Series - HTTPS"
  • «🐲【5】Отключение HTTP-серии — CCPG»
  • "🐲【6】Серия интервью по закрытию HTTP"

Весь контент статьи включен в личный блог GitHub:niubility-coding-jsПриходи и дай мне звезду 😊~

Этот каталог

Прочитав эту статью, вы сможете узнать:

  • Обзор HTTP
  • Особенности и недостатки HTTP
  • Метод HTTP-запроса
  • Коды состояния HTTP

(Обратите внимание, что те, которые отмечены 🌟, должны быть освоены)

1. Обзор HTTP

HTTP (протокол передачи гипертекста) является наиболее широко используемым сетевым протоколом передачи данных в Интернете.

Первоначальная цель разработки HTTP — предоставить метод публикации и получения HTML-страниц.Это протокол прикладного уровня для передачи данных, основанный на протоколе связи TCP/IP.

Следует отметить следующие моменты:

  • Обзор HTTP в одном предложении
  • Несколько версий классического HTTP
  • где существует HTTP

1.1 Обзор HTTP в одном предложении

[Спросите во время интервью: обзор протокола HTTP в одном предложении] 🌟🌟🌟🌟

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

(HTTP обычно работает вTCP/IP协议栈на вершинеIP协议实现寻址和路由,TCP协议实现可靠数据传输,DNS协议实现域名查找,SSL/TLS协议实现安全通信.当然,WebSocket、HTTPDNS依赖于HTTP。 ——HTTP World View «Attack Front-End Engineer» (с китайским переводом HTTP/3) — Тонг Оуба)

1.2 Несколько версий HTTP Classic

  • первое издание"HTTP/0.9"В"1990 год"Он вышел и не был установлен в качестве формального стандарта.
  • установленный в качестве формального стандарта"HTTP/1.0""май 1996 г."выпускать. (Билин старше Лин Дуана на 4 месяца)
  • Текущая основная версия"HTTP/1.1""январь 1997 г."выпускать.
  • "май 2015 г."Выпущенный"HTTP/2". (Он не называется HTTP/2.0, потому что комитет по стандартам не планирует выпускать подверсии, следующая версия будет напрямую HTTP/3)

1.3 Где существует HTTP

Первый уровень в многоуровневой модели сети TCP/IP."прикладной уровень".

Другие протоколы на прикладном уровне включают в себя:

  • FTP: протокол передачи файлов, используемый для передачи файлов между клиентом и FTP-сервером.
  • Система доменных имен DNS: предоставляет службы разрешения между доменными именами и IP-адресами.
  • SMTP: протокол отправки почты, пользователи отправляют почту через SMTP-сервер.
  • DHCP: протокол динамической конфигурации хоста, DHCP-сервер динамически назначает IP-адреса клиентам.
  • POP3: протокол получения почты, используемый для получения почты с сервера POP3.

【Задайте общий ответ на собеседовании и достаточно первых трех】🌟🌟

2. Особенности и недостатки HTTP

2.1 Особенности HTTP

Часто задаваемые вопросы, важный индекс: 🌟🌟🌟🌟🌟

  1. Протокол HTTP поддерживает режим клиент/сервер, а также является протоколом режима запрос/ответ.
  2. Гибкая масштабируемость: одна является семантической свободой, задает только базовый формат, остальные части не имеют строгих ограничений; вторая позволяет передавать любой тип объекта данных, например, текст, изображения, аудио и т. д., тип тег Content-Type передачи.
  3. Надежный транспорт, HTTP основан на TCP/IP и, таким образом, наследует эту функцию.
  4. Без сохранения состояния, что означает, что HTTP-запросы не имеют возможности сохранять ранее отправленные запросы или ответы, и каждый запрос является независимым и несвязанным.

Если хочешь, ответь"постоянное соединение":

  • Концепция: Установление TCP-соединения может выполнять несколько запросов или ответов.
  • Причина. Первоначальная версия HTTP предназначена для разрыва соединения TCP каждый раз, когда выполняется связь HTTP, и соединение снова разрывается при следующем выполнении. Теперь, когда запрашиваемые ресурсы становятся все больше и больше, возникает много накладных расходов, если есть ненужные TCP-соединения и отключения для каждого запроса.
  • Особенности: Пока одна сторона явно не предлагает отключиться, состояние TCP-соединения сохраняется.
  • Преимущества: сокращение дополнительных накладных расходов, вызванных подключением и отключением TCP, снижение нагрузки на сервер и ускорение загрузки веб-страниц.
  • Примечание. В HTTP/1.1 все соединения по умолчанию являются постоянными (то есть поле заголовка Connection: keep-alive, если вы хотите закрыть, установите значение close), но HTTP/1.0 не стандартизирован.

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

2.2 Недостатки HTTP

Часто задаваемые вопросы, важный индекс: 🌟🌟🌟🌟🌟

Проще говоря:

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

подробно опишите:

  1. Передача открытого текста (не зашифрованного), содержимое может быть перехвачено. Сообщения в протоколе используют не бинарные данные, а текстовую форму
  2. Целостность сообщения не может быть проверена, а содержимое может быть изменено. Целостность здесь относится к точности информации Поскольку получатель или отправитель не могут подтвердить, были ли данные, отправленные другой стороной, подделаны в середине
  3. Если личность общающейся стороны не проверяется, можно столкнуться с маскировкой. Поскольку сторона связи не подтверждена в протоколе HTTP Любой может отправить запрос, и сервер не подтвердит полученный запрос, пока запрос получен, он вернет ответ (конечно, это только IP-адрес или номер порта отправителя, не ограниченный Веб-сервер.Предпосылка)
  4. Без гражданства, не имеет возможности сохранять ранее отправленные запросы или ответы. Это и недостаток, и преимущество:
    • Для некоторых сценариев длительного соединения необходимо сохранить контекстную информацию, чтобы избежать передачи повторяющихся данных.
    • Для некоторых приложений только для получения данных без сохранения информации о контексте, без сохранения состояния снижает нагрузку на сеть.
  5. Блокировка начальника линии:
    • Фундаментальная причина в том, что HTTP основан на модели «запрос-ответ», и в том же длинном TCP-соединении, если предыдущий запрос не получит ответа, последующий запрос будет заблокирован.
    • Эта проблема решается параллельными подключениями и шардингом домена. Но это не решается с уровня самого HTTP, оно просто увеличивает TCP-соединение и распределяет риск.
    • Мультиплексирование в HTTP/2 решает эту проблему на уровне самого HTTP.
    • Отличие от блокировки заголовка строки TCP: единицей передачи TCP являются пакеты данных, а блокировка заголовка строки означает, что следующее сообщение не будет загружено в HTTP, если предыдущее сообщение не получено. Блокировка заголовка очереди HTTP происходит на уровне запрос-ответ, предыдущий запрос не был обработан, последующий запрос блокируется.

3. Метод HTTP-запроса

3.1 Типы методов

Часто задаваемые вопросы, важный индекс: 🌟🌟🌟🌟🌟

  1. GET: получить ресурс, идемпотентная операция

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

  3. POST: создать или обновить ресурс, неидемпотентная операция

  4. PUT: создать или обновить сам ресурс, идемпотентная операция

  5. PATCH: локальное обновление ресурсов, неидемпотентная операция

  6. Удалить: Удалить ресурс, вопреки функции PUT, IDEMPOTENT операции

  7. Параметры: Запросите тип метода HTTP, поддерживаемого серверной стороной (питание и другие операции):

    просить OPTIONS * HTTP/1.1
    Host: lindaidai.wang
    отклик HTTP/1.1 200 OK
    Allow: GET, POST, HEAD, OPTIONS
    (возвращает методы, поддерживаемые сервером)
  8. CONNECT: установить туннель соединения для прокси-сервера, идемпотентные операции

  9. TRACE: трассировка запросов, запрос о том, как обрабатываются/подделываются исходящие запросы, идемпотентные операции. Вызвать атаку XST с межсайтовым отслеживанием легко.

3.2 Что означает идемпотентность в HTTP?

Важный индекс: 🌟🌟🌟🌟

(Давайте дайте нам знать о его концепции)

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

Рассмотрим подробно анализ каждого пункта:

  1. Метод GET используется для получения ресурсов и не должен иметь побочных эффектов, поэтому он"идемпотент"из. Например: ПОЛУЧИТЬhttp://lindaidai.wang/account/123, не изменяет состояние ресурса и не имеет побочных эффектов независимо от того, вызывается ли он один раз или N раз. Но будьте осторожны, вот"Никаких побочных эффектов, сколько раз это называется", вместо одного и того же результата для каждого GET. Поскольку вы считаете, что можно напрямую изменить эти данные в базе данных, то в следующий раз полученные данные могут быть другими, но это не дает побочных эффектов, поэтому оно идемпотентно.
  2. Случай метода HEAD GET такой же, за исключением того, что он используется только для получения заголовка сообщения и не возвращает тело сообщения, поэтому он также"идемпотент"из.
  3. POST и PUT легко спутать, раньше я думал просто:POST表示创建资源,PUT表示更新资源; но на самом деле они оба могут использоваться для создания и обновления ресурсов, но существенное отличие заключается в идемпотентности. URI, соответствующий POST, — это не создание самого ресурса, а"получатель ресурса". Например:POST http://lindaidai.wang/articlesСемантика находится вhttp://lindaidai.wang/articlesДалее, чтобы создать публикацию, ответ HTTP должен содержать статус создания публикации и URI публикации. Два идентичных запроса POST создадут два ресурса на стороне сервера с разными URI, поэтому POST"неидемпотентный"из.
  4. URI, соответствующий методу PUT, должен быть создан или обновлен."сам ресурс". Легко неправильно понять, что это не идемпотент, но на самом деле это"идемпотент"из. Например:PUT http://lindaidai.wang/accout/321Семантика заключается в создании или обновлении сообщения с идентификатором 321. После выполнения первого метода PUT ресурсы, сгенерированные на сервере, не могут быть изменены последующими методами PUT, поэтому побочные эффекты нескольких PUT для одного и того же URI такие же, как и у одного PUT, поэтому"идемпотент"из.
  5. Метод DELETE используется для удаления ресурсов и имеет побочные эффекты (это означает, что содержимое ресурсов на сервере будет изменено), но он"идемпотент"из. Потому что, например:DELETE http://lindaidai.wang/accout/321Вызов один раз и вызов N раз имеют одинаковый побочный эффект в системе, оба для удаления сообщения с идентификатором 321. Таким образом, вызывающий абонент может вызывать или обновлять страницу несколько раз, не беспокоясь об ошибке.
  6. Варианты этого хорошо понятны, просто чтобы получить методы, поддерживаемые сервером, я знаю, что обычно используется, когда агент, а затем будет использоваться предварительный запрос. это"идемпотент"из.

【Как отвечать на собеседовании】

Идемпотентность метода на самом деле означает оценку того, повторяется ли метод много раз и результат один и тот же.Если он идемпотентный, это, по сути, означает, что результат успешного выполнения запроса не имеет ничего общего со временем его выполнения. Все, что я знаю, только"POST"а также"PATCH"Она неидемпотентна, остальные операции идемпотентны.

3.3 Разница между GET и POST

Мне не нужно больше говорить, часто спрашивайте очки знаний, важный индекс: 🌟🌟🌟🌟🌟

(Здесь я использую ответ из троичного резюме + некоторые из моих собственных представлений)

  • С точки зрения кэширования GET будет активно кэшироваться браузером, оставляя исторические записи, а POST — нет.
  • С точки зрения кодирования GET может быть закодирован только в URL, он может принимать только символы ASCII, но POST не имеет ограничений.
  • С точки зрения параметров GET обычно помещается в URL для передачи параметров, а POST помещается в тело запроса, что больше подходит для передачи конфиденциальной информации.
  • С идемпотентной точки зрения GET является идемпотентным, а POST — нет.
  • Однако, насколько мне известно, GET и POST по сути являются TCP-соединениями, и между ними нет никакой разницы. Однако из-за правил HTTP и ограничений браузера/сервера они показывают некоторые различия в процессе подачи заявки.
  • С точки зрения TCP также можно сказать, что запрос GET будет отправлять сообщение запроса за один раз, но POST будет разделен на два пакета TCP. Заголовок отправляется первым.Если сервер ответит 100 (продолжить), конечно, будет отправлена ​​часть тела."Fire Fox"За исключением браузера, его POST-запрос отправляет только TCP-пакет.

(В это время интервьюер может также дополнительно спросить вас: поскольку POST должен быть отправлен двумя TCP-пакетами, будет ли GET более эффективным, чем POST?)

Вы можете ответить так:

  • Во-первых, у GET и POST своя семантика и лучше их не смешивать
  • Кроме того, хотя пост будет разделен на два пакета, на самом деле невозможно отправить вторичный пакет и разницу между двумя пакетами в случае сетевых условий. И в случае разницы в условиях сети TCP двух пакетов оказывают большее преимущество от целостности пакета.
  • Более того, не все POST-запросы браузера будут отправлять два TCP-пакета, например Firefox.

3.4 Поддержка

  • OPTIONS, CONNECT, TRACE поддерживаются только выше HTTP/1.1
  • LINK, UNLINK устарели в HTTP/1.1

3.5 Что сделает сервер, когда получит неподдерживаемый метод?

Когда сервер получает неподдерживаемый метод, он возвращает405 Method Not Allowed, и запишет все поддерживаемые методы в поле заголовка ответного сообщенияAllowвернуться в.

4. Коды состояния HTTP

Важный индекс: 🌟🌟🌟🌟🌟

(Это еще один хардкорный пункт знаний... Здесь Лин просто перечисляет некоторые часто используемые)

1xx Информационное

"Запрос получен и требует дальнейшей обработки для завершения, но не поддерживается HTTP/1.0."

  • 101 Switching Protocols: возвращает 101, если сервер соглашается на изменение при обновлении с HTTP на WebSocket.

2xx статус успеха

"Запрос успешно обработан."

  • 200 OK: Запрос добивается успеха, данные обычно возвращаются с телом ответа.
  • 204 No Content: значение и200То же самое, но возвращаемые данные не имеют тела ответа.
  • 206 Partial Content: Клиент сделал запрос диапазона, и сервер обработал его нормально, заголовок ответного сообщения должен по-прежнему иметьContent-RangeПоле указывает область сущности. Сценарий использования — загрузка блока HTTP и возобновление точки останова.

3xx редирект

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

  • 301 Moved Permanently: постоянное перенаправление, последний URI является заголовком ответного сообщения.Locationполе. Сценарий такой: например, ваш сайт сменил адрес, а прежний адрес больше не используется, если пользователь все равно зайдет с прежнего адреса, он вернется301И вLocationВведите последний URI. А браузер по умолчанию выполнит оптимизацию кеша, уменьшит нагрузку на сервер и автоматически получит доступ к перенаправленному адресу во время второго посещения.
  • 302 Found: временное перенаправление и301Другое, это означает, что запрошенный ресурс был временно перемещен на другой URI, и, поскольку он является временным, он не будет кэшироваться.
  • 303 See Other: временное перенаправление, запрошенный ресурс временно перемещается на другой URI, но четко указано, что клиент должен использовать метод GET для получения ресурса.
  • 304 Not Modefied: Клиенту разрешено возвращать ресурс, даже если условие не соответствует условному запросу, хотя он разделен на3xx, но это не имеет ничего общего с перенаправлением. Такие сценарии, как: успешное согласование кеша вернет304 Not Modefied, указывая, что запрошенный ресурс не изменился на сервере, сообщая запрашивающей стороне, что кеш можно использовать. (Вы можете прочитать мою статью«Линь Дуань, давай поговорим о кешировании в браузере»)
  • 307 Temprary Redirect: временное перенаправление, но менее302Чтобы быть более явным, ни метод перенаправленного запроса, ни объект не могут изменяться. Такие сценарии, как:HSTSпротокол, заставляющий клиентов использоватьhttpsустановить соединение, например, ваш веб-сайт сHTTPобновлен доHTTPS, а ты еще проходиhttp://xxxЕсли вы посетите, он вернется307 Internal Redirect. (можешь попробоватьjuejin.cn)

Простое сравнение трех временных редиректов:

  • 302 Found, базовая временная переадресация
  • 303 See Other, явно указывающее, что клиент должен использоватьGETметод
  • 307 Temprary Redirect, метод запроса и объект не могут быть изменены

4xx ошибка клиента

"Произошла ошибка на стороне клиента."

  • 400 Bad Request: Запрос наличия синтаксических ошибок в пакете, но нет конкретно указывает.
  • 401 Unauthorized: требуется информация для проверки подлинности, прошедшая проверку подлинности HTTP, или указывает, что проверка подлинности пользователя не удалась.
  • 403 Forbidden: Запрошенный ресурс был отклонен по причине: например, запрещенной законом, конфиденциальной информации.
  • 404 Not Found: Запрошенный ресурс не найден, что означает, что соответствующий ресурс не найден на сервере.

ошибка сервера 5хх

"Произошла ошибка на стороне сервера."

  • 500 Internal Server Error: внутренняя ошибка сервера, но без указания где, и400Немного как.
  • 501 Not Implemented: Указывает, что функция, запрошенная клиентом, еще не поддерживается.
  • 502 Bad GateWay: Сам сервер нормальный, но прокси-сервер не может получить юридический ответ (брат на вынос не доставил его при заказе на вынос)
  • 503 Service Unavailable: Сервер перегружен или закрыт на техническое обслуживание (как и наш магазин сегодня не работает)

Параметрический артикул

послесловие

Ты с нетерпением ждешь мира, надеюсь, у тебя нетbug. Эта статья представлена ​​здесь.

Можно обнаружить, что в базовой главе основными являются некоторые концептуальные вопросы, которые можно прочитать примерно за 10 минут. Нам не нужно так отчаянно разбираться, как изучать знания о рукопожатии RSA, рукопожатии ECDHE и цифровой подписи. Еще некоторые основные знания, которые мы должны иметь в виду.

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

"世界上有两句语言最浪漫动人"

"第一句是 “我爱你”"

"第二句是 “你写的文章真好看”"

"看官你看这样好不好?"

"以后您说第二句"

"然后我说第一句"

ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа...

подобно"Лин Дуан"Также парень надеется обратить внимание на паблик Лина.LinDaiDaiИли отсканируйте QR-код ниже👇👇👇.

Время от времени я буду обновлять некоторый внешний контент знаний и свои собственные оригинальные статьи🎉

Ваша поддержка - главная мотивация для меня продолжать творить 😊.

связанное предложение:

"Самый подробный учебник по bpmn.js во всей сети"

«[Предлагаемое изменение] Прочитав это, вы все еще не понимаете Вавилон, я пришлю вам маску»

«[Рекомендуемые звезды] Подойдите к концу 45 вопросов интервью Promise (1,1 Вт слов, тщательно организованных)»

«[Предложение👍] Давайте продолжим с еще 40 вопросами из этого интервью (1,2 Вт сортировки слов вручную)»

«[Почему не Sanlian] Вопросы о наследовании JS, которые проще, чем наследование семейного бизнеса — инкапсуляция (тест коровьего ножа)»

«[Почему не Sanlian] Ответив на эти 48 вопросов, я полностью понимаю наследование JS (слова 1.7w содержат симпатию — вернитесь к оригиналу)»

«[Хорошо] Полностью понять прошлое и настоящее преобразования типов данных из 206 console.log () (1)»

В этой статье используетсяmdniceнабор текста