В этой статье около 6000 слов, и ее чтение занимает около 10 минут.
напиши первым
Кто-то говорит, что сетевая база фронтенд-инженеров очень слабая, что многие не компьютерщики, а порог низкий, на самом деле его нельзя обобщать. Но раз люди жалуются, давайте исправимся.
Нет правил, нет стандартов
Фронтенд-инженеры должны глубоко прочувствовать это предложение, это также может быть связано с тем, что изменений во фронтенде действительно слишком много.TM
скоро. Но изменения так быстры, они всегда должны успокоитьсяправилоНу, а если нет, то это не может закончиться.
Где устоявшиеся правила?
Существует множество правил, например:AMD
,CMD
,Promise
Подождите, это можно рассматривать как своего родаправило, далее в совокупности именуемые стандартом.
Есть такая поговорка:
Вы можете создавать библиотеки по своему усмотрению, но не устанавливайте стандарты по своему усмотрению.
Другими словами, если не хватает людей, которые согласны с этим, то созданный вами стандарт действительно бесполезен.
Итак, остановитесь и задумайтесь, давайте посмотрим на это с философской точки зрения:
Если не будет стандарта, то мир станет очень беспорядочным и хаотичным, именно благодаря стандарту мир становится упорядоченным и аккуратным.
Мы можем вывести это по аналогии с индукцией данных:
Мы будем всемирной сетью (Internet
— Интернет), провести индукцию и сделать вывод, что если в мире не будет общепринятого стандарта для сети, то она станет аномально хаотичной.
Поэтому, когда мы изучаем основы сети, мы фактически изучаем сегодняшниеInternet
стандарт. Когда мы изучаем стандарт, мы можем следовать ему и делать то, чего хотим достичь. На самом деле, вы обнаружите, что многие вещи совпадают.
Теперь мы должны знать, как улучшить нашу сетевую основу.
мы собираемся учитьсяInternet
Давайте посмотрим, каков его стандарт, почему он разработан таким образом, каковы преимущества написания его таким образом и какова программная идея этого дизайна.
Идеи программирования иногда вызывают у нас много разных чувств.
почему сейчасMVP
,MVVM
,MVX
и другие шаблоны дизайна. Это из-за хороших программистов, чтобы учитьсяMVC
После классической дизайнерской идеи черпайте вдохновение, а затем расширяйте классическую дизайнерскую идею во множество других превосходных дизайнерских идей. Следовательно, это также цель изучения чего-либо, и это также способ обучения, который позволяет нам сформировать режим самостоятельного обучения. Только так мы сможем продолжать двигаться вперед.
Ладно, не будем нести чушь, тогда начну объяснять со своих личных знаний и мнений.Основы сети.
PS:Promise
имеютPromiseA/B/C/
ждал стандартов сообщества, но в итоге выбралPromiseA+
в качестве официального стандарта.
Internet
не загадочный
Internet
Это не совсем таинственно, и выслушайте меня:
Если вы хотите выйти в интернет, то у вас должно быть сетевое оборудование.Не обязательно покупать его здесь, оно может быть предоставлено кем-то другим.Например, если оператор дергает провод, вам не нужно купить провод (вручную прикольно), есть еще хосты, коммутаторы, роутеры и т.д., которые в основном состоят изInternet
сетевое оборудование.
Возможно, некоторые люди не понимают, что делает каждое устройство, но есть некоторые вещи, когда вы не понимаете, попробуйте использоватьМетод заменычтобы понять. Например, вы можете не понимать коммутаторы и маршрутизаторы, но если вы их не понимаете, это создаст препятствия для дальнейшего понимания.Так что же нам делать?
Мы можем относиться к аппаратным устройствам как к программному обеспечению.
Ведь железо это тоже код, конечно, кода нет, типа линии, хаба, но можно подумать, что в нем прописана пустая функция, это может понять железо с уровня ПО.
Тогда это немного милее:
Аппаратное обеспечение, выполняющее определенную функцию, можно рассматривать как функциональный модуль программного обеспечения с входными и выходными параметрами.
Чтобы визуализировать это снова, это можно понять как промежуточное программное обеспечение.
Данные передаются в промежуточном программном обеспечении, и в каждом промежуточном программном обеспечении выполняется соответствующая обработка, такая как инкапсуляция, проверка правильности и, наконец, данные отображаются на ваших глазах.
Если вы понимаете это таким образом, чувствуете ли вы, что это не так глубоко и трудно понять, как вы себе представляли?
На самом деле, наша цель состоит в том, чтобы:
Визуализируйте абстрактное и эзотерическое знание, а затем абстрагируйте визуализированное знание во что-то, что мы можем понять.
Так что это похоже на то, что мы однажды сделали наши прекрасные мозгиbabel
Перевод, это действительно весело, это быстрый способ понять эзотерику. Знания нельзя выучить до смерти. Изменения неотделимы от своих корней. Во многих местах есть одни и те же идеи. Умение интегрировать — очень важная способность.
Ассоциация, вызванная классическим вопросом
Можете ли вы рассказать о процессе трехкратного рукопожатия и четырехкратного махания рукой?
Я полагаю, что этот вопрос задавали многим людям. Это незаменимый вопрос в случае исследования знаний о сети. Он также показывает, что знания, отраженные в этом вопросе, являются базовыми и исследуют основу вашей сети.
Теперь, когда мы снова видим проблему, мы можем попытаться перейти к источнику. Например, подумайте, почему существует этот процесс, почему вы должны делать это именно так, нельзя ли решить его двойным рукопожатием, нельзя ли обойтись без четвертой волны?
Вот статья, которую лично я считаю неплохой:
Следуйте анимации, чтобы изучить трехстороннее рукопожатие TCP и четырехстороннюю волну.
Не буду отвечать на ответ на тройное рукопожатие и четырехстороннюю волну, статья выше уже представила его более наглядно. Если у вас есть какие-либо вопросы, вы можете отсканировать мой QR-код WeChat в конце статьи, и мы поговорим в частном порядке (забавное лицо).
История данных и электричества
Вот история моей ерунды:
Передача данных с одного хоста [Пекин] на другой хост [Нанкин] — это сложный процесс. В отличие от передачи энергии, это всего лишь вопрос одного мозга. Конечно, передача энергии — это также знания высокого уровня, такие как высоковольтная энергия коробка передач.
Но данные намного сложнее, чем электричество.
Например, электричество — это центральный кондиционер, и кто за него платит, я его кому подведу, всем одинаково, ничего. В принципе не бывает такой ситуации, как: твоя бытовая техника такая милая, твоя бытовая техника намного красивее моей. С помощью этого маленького каштана я в основном хочу объяснить, что у электричества нет конфиденциальности, и у пользователей нет возможности что-либо потерять. Напряжение сегодня низкое, терпите, завтра поменяйте большой трансформатор, ночью будет нормально, а пользователь ничего не скажет.
Напротив, данные отличаются. Данные являются своего рода частной информацией. Поскольку они обладают конфиденциальностью, они должны обеспечивать безопасность и целостность, и они не могут быть иногда безопасными, иногда небезопасными, иногда полными, а иногда неполными. Поэтому сложность передача значительно увеличивается.
Ассоциация, вызванная картинкой
Давайте посмотрим на картинку ниже:
Во-первых, на этой картинке показан текущийInternet
иерархическая структура. Я также не объясняю, почему это так сейчас, потому что это стандарт и есть консенсус. Но я хочу сказать несколько вещей.
Первая ситуация: Вы наверняка не раз видели такую картинку, но у многих людей до сих пор спрашивают во время интервью, и они какое-то время не могут ее вспомнить, трансформировавшаяся память. Например, это кровавый факт, что после произнесения такого количества английских слов они быстро забываются. Итак, теперь, когда мы снова видим эту картинку, как мы можем гарантировать, что нас не спросят снова в следующий раз?
Тогда надо возиться с памятью, строить ассоциации, привлекать истории, иметь сюжет.OK
, теперь, что мы можем ассоциировать с этой картиной? Это вопрос, поэтому следуйте за мной и начните думать.
первый угол
Думайте с точки зрения внешнего интерфейса,OSI
семислойная модель дляTCP/IP
В процессе преобразования четырехслойной модели очевидно, что инкапсуляция выполнена.
Думая с точки зрения промежуточного программного обеспечения, это7
слой или4
Слой, мы можем думать о каждом слое как о промежуточном программном обеспечении. Данные передаются между промежуточным ПО, поэтому каждый раз, когда они проходят через промежуточное ПО, это означает, что обработка данных будет выполняться один раз. Каждое промежуточное ПО выполняет определенную функцию.TCP/IP
Четвертый уровень — это философия обертывания семислойной модели и упрощения сложности. Объединение слоев с повторяющимися функциями в одном слое помогает обеспечить относительную независимость функций каждого уровня и их принадлежность к более высокому уровню абстракции. Детали скрыты, а функциональные различия между уровнями более выражены.
второй угол
Доступна сnpm
Думая о пакетах, вы найдете вTCP/IP
分层结构中,高层级会依赖低层级。 как будтоnpm
упаковать, установитьA
пакет, который вы автоматически установитеB
Мешок,B
пакет будет зависеть отC
Мешок. То есть для успешной установкиA
пакет, затемB
Мешок,C
Задействованы все пакеты. Хорошо, если вы понимаете это таким образом, поток данных, инициированный моим прикладным уровнем, определенно будет зависеть от транспортного уровня, сетевого уровня и уровня интерфейса. Поэтому некоторые фронтенд-инженеры умеют только инициироватьajax
илиfetch
При запросе спускайтесь внизhttp
. для прогулокtcp
, ip
, интерфейсный слой. не уверен. Итак, видя это, я думаю, что мои друзья все еще должны иметь хорошее представление о том, как запросы данных, которые вы инициируете, проходят в сети.
Соединение между HTTP/TCP/IP
Какая связь между тремя, здесь я даю каштан, хотя и не точный, но достаточно образный.
IP
является единицей хоста, черезIP
может найти ваш город.
TCP
основан на порте хоста, черезTCP
Найдите свой район в своем городе.
HTTP
Ну, это основано на пользовательских процессах, черезHTTP
Вы можете узнать номер комнаты района, в котором находится ваш город.
По приведенной выше аналогии очень легко понять, в этом прелесть рассказывания историй, хахаха. Этот пример также может показать, что если вы хотите найти номер комнаты, вы должны сначала найти город, затем найти сообщество и, наконец, найти номер комнаты. То есть вы хотите отправитьHTTP
Чтобы быть успешным, он должен бытьTCP
, IP
должен пройти успешно, прежде чем вы сможете отправитьHTTP
успех.
Примечание от 3 февраля 2019 г.: вышеHTTP/TCP/IP 三者的联系
Приведенный пример очень неточен, прошу прощения.
Большой парень связался со мной:
Вышеприведенная картинка дала правильное объяснение.Основная причина в том, что я форсировал повествование, что привело к некоторой постановке телеги впереди лошади, и было легко ввести друзей в заблуждение, так что прошу прощения.
IP
IP
Уровень является сетевым уровнем и определяет, как адресуются различные хосты. Просто понять, это черезIP
адрес, чтобы найти соответствующий хост.
TCP/UDP
Транспортный уровень является очень важным уровнем, связывающим предыдущий и следующий, предоставляя услуги связи вышестоящему прикладному уровню и инкапсулируя информацию прикладного уровня в сетевую информацию снизу.
Транспортный уровень соединяет процессы между хостами, а сетевое взаимодействие различных процессов на одном хосте различается портами, поэтому транспортный уровень предоставляет хостам услуги «порт-порт».
Вот какой процесс
Таким образом, можно понять, что когда приложение вызывается в память для запуска, приложение можно назвать процессом.
Порт не принадлежит ни одному приложению
Приложение устанавливает соединение с портом через системный вызов (Binding
), будет определено, что порт обслуживает процесс, а данные и все передаются процессу через порт. Поскольку порт не принадлежит ни одному приложению, только когда он привязан, он определяет, какой процесс обслуживать.
Как взаимодействуют транспортный уровень и порты
Данные, отправленные транспортным уровнем на порт, принимаются соответствующим процессом, а данные, отправленные соответствующим процессом на транспортный уровень, отправляются из порта. Порт здесь — это то, как адресуется транспортный уровень.
Порт — это концепция на программном уровне.
Порт — это положительное целое число, представленное 16-битным двоичным числом, что означает, что хост теоретически может иметь максимум 65535 каналов транспортного уровня. Но обычно меньше 65535. Например, порт 80, порт 21, порт 8080 и т. д. — все это номера портов по умолчанию, и через эти номера портов осуществляется конкретная связь.
HTTP
HTTP
построен наTCP/IP
протокол верхнего прикладного уровня иHTTPS
вHTTP
присоединиться кSSL/TLS
.
Коротко представить,HTTP
является английской аббревиатурой Hypertext Transfer Protocol, т.е.Internet
самое важноеWeb
Стандарты уровня приложений,HTTP
Возможность передачи данных в любом формате.
Как фронтенд-инженеры, мы должны начать с
HTTP
Чему ты там научился?
Мы говорим одно, например, интервью часто спрашивают вас, введитеurl
Что потом будет, собственно, если понять это глубже, можно нарисовать картинку и сказать ему, конечно, об этом можно говорить только при звонке по телефону.
- Сначала вы нажимаете на
url
Он был инициирован один разhttp
просить -
http
Запрос, безусловно, будет зависеть отtcp
,ip
Ждать. что означает, что вы делаетеtcp
Цзяньлянь,IP
Запрос. - если ваш
url
Если это доменное имя, вам необходимо сначала разрешить доменное имя, то естьdns
работать. сделать это вip
адрес. Этот процесс должен быть завершен на прикладном уровне, потому что, если прикладной уровень не завершен, тоTCP
не могу получить слойIP
адрес, чтоIP
Адресные данные не будут получены. Поэтому, когда мы делаем такой вывод, мы знаем, чтоdns
сделано на уровне приложений. - После нормы данных на интерфейсный слой, он должен быть передан соответствующему
IP
Соответствующий порт сервера для адреса. то естьTCP
Стройте Союз.TCP
Чтобы сначала установить успешное соединение,HTTP
для передачи. Поскольку это зависимость, получательHTTP
нужно отTCP
Это получает данные. еслиTCP
Не удалось установить соединение, затемHTTP
Невозможно установить успешный союз. - Если все успешно, то переносим данные.
- После передачи,
TCP
Соединение закрыто. Страница имеет новые данные, отображаемые перед пользователем
Увидев это, вы обязательно подумаете, кеш, я тут кеш не учел, кеш сегодня везде, давайте заполним этот пункт сами.
Вот классная диаграмма, показывающая, когда вводURL
, как выглядит весь процесс. Как показано ниже:
HTTP
это эталон, у него своя форма, видите лиHTTP
Вы наверное можете себе представить форму передачи данныхTCP
Наверное, какая форма передачи данных.
Структура данных сетевого запроса контролируется внешним интерфейсом, например, метод запроса, запрошенныйurl
, параметры запроса и т. д. Затем структура данных ответа должна контролироваться сервером, а сервер выдает нам необходимую возвращаемую информацию, такую как код состояния, данные, управление кешем и т.д.
Коды состояния HTTP
существуетweb
В программировании коды состояния очень важны.
Какова цель установки кода состояния?
Это позволяет разработчикам и пользователям узнать, нормально ли сервер обработал запрос или произошла ошибка. Понимание цели очень необходимо нам, чтобы понять, почему код состояния разделен именно так, по крайней мере, это не так незнакомо в наших сердцах.
И в коде состояния есть ряд очень важных, т.е.3XX
ряд.
301
,302
разница
302 временная переадресация
Временное перенаправление, осведомленность в том, что когда сервер отключается, клиент инициируетurl
Запрос не может быть успешным. Также необходимо инициировать запрос к серверу, чтобы сервер перенаправил на целевой URL, то есть вернулlocation
, затем перейдите к целевому URL.
PS: Подумайте об этом, почему там 302?
301 Постоянное перенаправление
Постоянное перенаправление инициируется браузером, даже если сервер закрытurl
Запрос также может направляться непосредственно к целевому URL-адресу, минуя сервер. Если кэш не очищен, последующие обращения будут напрямую обращаться к другому адресу.
Метод HTTP-запроса
Это можно понять так,HTTP
Это похоже на параметр объекта, который имеетMethod
,представлятьHTTP
Метод запроса используется, чтобы сообщить серверу, что клиент обращается к вашемуurl
Какова цель, будь то получение информации, загрузка данных или удаление информации. Наиболее часто используетсяGET
а такжеPOST
. часто используемыйGET
а такжеPOST
Не говори это, скажи это здесьOPTIONS
:
OPTIONS
заключается в том, чтобы предоставить запрос для клиентаURL
Какие способы доступа доступны по адресу.
PS: оставьте это для размышлений, этоOPTIONS
Каков сценарий использования?
POST
а такжеPUT
Разница:
POST
:POST
Сервер должен убедиться, что данные полностью сохранены, и дубликаты не допускаются.POST
подача данных. обычно вHTML
для отправки данных через форму.
PUT
:PUT
Разрешить клиенту отправлять повторяющиеся данные. При отправке повторяющихся данных существующие данные на сервере будут перезаписаны новыми отправленными данными.
PS: Вот книга, которую я рекомендую, "Иллюстрированный HTTP", которая очень хорошо написана, с картинками и текстом, простая и понятная, ее стоит прочитать.
Как HTTP проходит на стороне сервера
Посмотрите на картинку, которую я нарисовал ниже, это серверная программа,Web
Отношения между сервером и клиентом:
На картинке выше представлена основная модель.Web
Сервер действует только как мост, т.е.HTTP
Запрос декодируется и преобразуется в метод вызова интерфейса, который может распознать серверная программа, а затем серверная программа инкапсулирует сгенерированный возврат в видеHTTP Response
, и возвращается пользователю.
Примечание 1:
На стороне сервера, если запрос, отправленный пользователем, предназначен для получения статических ресурсов, он обычно не проходит через программу на стороне сервера, а напрямую возвращает ресурс пользователю через механизм кэширования на стороне сервера, такой какNginx
кеш статических ресурсов. Без серверной программы скорость отклика будет значительно выше.
Заметка 2:
Обычно сервер находится во внутренней сети компании, и доступ к внешней сети недоступен.HTTP
запрос, ведь в большинстве случаев он передается первымNginx
Обратный прокси-сервер также отвечает за перенаправление трафика и пересылку различных запросов на определенные серверы в интрасети.
Socket
Socket
На китайском языке это относится к сознанию отверстия или розетки.Как следует из названия, он может общаться, когда он подключен.Socket
сначала какBSD UNIX
Механизм взаимодействия процессов постепенно стал стандартом сетевого программирования, которого придерживаются основные операционные системы.
Socket
что
Socket
Это дескриптор коммуникационной цепочки, который можно использовать для реализации связи между разными виртуальными машинами или разными компьютерами, а также для реализации связи между разными процессами на одном хосте.
Socket
сочинение
Socket
= IP
адрес + порт + протокол
IP 地址 + 端口 + 协议
Уникальный идентификатор формируется для идентификации канала связи.
можно увидеть,Socket
На самом деле даTCP/IP
Он хорошо инкапсулирован и скрывает многие детали сети. Это позволяет разработчикам улучшить сетевое программирование. На самом деле мы пишем функцию, которая тщательно инкапсулирует внутренние детали и завершает указанное поведение, передавая параметры.
так сказать всеTCP/UDP
Дождитесь программирования, в основном согласноSocket
стандарт протокола для программирования, другими словами,Socket
представляет собой набор стандартов, напримерDOM
, все языки могут следоватьDOM
стандартный интерфейс для реализации собственной логики.
Socket
есть свои примитивы, разработчики могут следитьSocket
Реализация примитивов на разных языках для выполнения сетевого программирования.
Разговор о веб-сокете
Что такое веб-сокет?
ЭтоHTML5
Новый стандартный протокол, предназначенный для реализации полнодуплексной связи между браузером и сервером. мы можем поставитьWebSocket
понимается какWeb + Socket
, который представляет собой дуплексную связь.
Что такое дуплексная связь?
То есть в один и тот же момент я могу выступать и отправителем сообщения, и получателем сообщения.
Почему это появляетсяWebSocket
существуетWebSocket
Перед выходом передняя частьWeb
Общение в основномHTTP
,ноHTTP
(1 или 2) Сам запрос имеет некоторые недостатки, такие как:
- Информация заголовка является избыточной, и каждый раз, когда отправляется запрос, необходимо передавать большое количество избыточной информации.
- Дуплексная связь невозможна.
Итак, на этом техническом фоне,WebSocket
Технологии пришли и компенсировали этоHTTP
Дефекты. Но мы не можемHTTP
, потому что было использовано слишком много сцен, поэтому я объединил их и позволилWebSocket
соглашение находится вHTTP
на договоре. Это обеспечивает плавный переход на новый протокол связи.
WebSocket
принцип общения
WebSocket
УстановленоHTTP
выше, что означает, что вы должны построитьWebSocket
Если тебе нужно идтиHTTP
, после прогулки, вашWebSocket
Установлено длительное соединение. Затем, пока он не будет активно разорван, соединение между клиентом и сервером будет поддерживаться и не будет разорвано. Когда есть передача данных, она будет передаваться напрямую, больше не инициируетсяHTTP
просить.
Интерфейсное использованиеWebSocket
Это просто, всего несколькоAPI
, можете сами проверить. Но мы должны знать каждыйAPI
Что произошло, только когда мы поймем правду, стоящую за этим, мы сможем по-настоящему понятьWebSocket
.
Преимущества веб-сокета
- Поддержка функции push, сервер может передавать данные клиенту.
- уменьшить количество общения, с одной стороны
WebSocket
Информация в заголовке очень маленькая, с другой стороны, ее не нужно выполнять частоHTTP
Подключено, вы можете установить постоянное соединение.
Вот рекомендуемая статья, которая очень хорошо написана, вы можете взглянуть:
Каков принцип WebSocket? Почему возможно постоянное соединение?
C/S и B/S Архитектура
Фронтенд-инженерам все же необходимо пониматьweb
Развитие и эволюция архитектуры, когда дело доходит до развития и эволюции, я должен кое-что сказать.C/S
а такжеB/S
Архитектура.
C/S
C/S
,Прямо сейчасClient/Server
, текущая основная модель архитектуры сетевого программирования.Clent
осведомленность клиента,S
Это осведомленность к серверу.
B/S
которыйBrowser/Server
, это использоватьWeb
Браузер как клиентское приложение.
Из приведенного выше введения мы можем сделать вывод, чтоC/S
серединаC
Их много, напримерAPP
, настольные приложения и т. д. ноB/S
серединаB
Только конкретно для браузера.
Вот проблема,B/S
структура иC/S
В чем отличия или преимущества по сравнению со структурой?
Преимущества и недостатки Б/С
преимущество
Во-первых: наиболее очевидным является то,B/S
Обновления развертывания выполняются быстро, и обновления приложений не требуются, посколькуB/S
Все приложения системы развернуты на сервере и не требуют обновления клиентского ПО. так многоAPP
ВстроенныйH5
,Hybrid
. Поскольку обзор не требуется, его можно опубликовать напрямую. Почему вам не нужно проводить аудит из-за междоменных ограничений на внешнем интерфейсе,JS
Получить другую информацию об устройстве невозможно, поэтому можно не беспокоиться о проблемах безопасности и не нужно проводить аудит.
Второе: Кроссплатформенность, потому что операционная система ее поддерживает.Web
браузер, поэтому просто запустите его в браузере.
недостаток
высокие требования к безопасности,B/S
Архитектура построена в глобальной сети и доступна для всех пользователей. пройти черезurl
может получить доступ к ресурсам на стороне сервера, поэтому требования безопасности более чемC/S
под кайфом.
Примечание
- Я не писал слишком много подробностей, некоторые детали вы можете понять сами, или вы можете приватно пообщаться со мной для технического обмена.
- В этой статье описаны сетевые знания, которыми должен овладеть фронтенд-инженер в целом.
- Количество персонажей в этой книге нормальное, и смотреть на нее не должно быть слишком утомительно (смеется и плачет).
Ссылка на ссылку
Вывод в конце статьи
Прочитав это, мы обнаружим, что сетевые знания не так уж и загадочны.Если вы будете усердно учиться, вы также можете получить знания о сетевых интерфейсах.
общаться с
Серия технических статей Nuggets резюмируется следующим образом: если вы считаете, что это хорошо, нажмите звездочку, чтобы поощрить это, или вы можетеgithub
Меня беспокоит волна, непрерывный вывод качественных статей.
Я терминатор исходного кода, приветствую технические обмены, приглашаю следить за моим блогом Nuggets и время от времени делиться знаниями.
Кстати, чего еще не хватает, конечно же, желаю всем благополучного года Свиньи! !