Как разработчик программного обеспечения, вы определенно будете иметь полное и иерархическое понимание того, как работают сетевые приложения, а также включают технологии, используемые в этих приложениях: такие как браузеры, HTTP, HTML, веб -серверы, обработку требований и т. Д.
Эта статья будет изучать более глубокое, что происходит в фоновом режиме, когда вы введете URL ~
1. Прежде всего, вы должны ввести желаемый URL -адрес в браузере : 2. Браузер ищет IP -адрес доменного имениПервый шаг в навигации - выяснить его IP -адрес, получив доменное имя. Процесс поиска DNS выглядит следующим образом:
Кэширование браузера - браузер кэширует записи DNS в течение определенного периода времени. Интересно, что операционная система не сообщает браузеру время для хранения записи DNS, так что разные браузеры будут хранить самоопределенное время (от 2 до 30 минут). Системный кэш - если требуемая запись не найдена в кэше браузера, браузер сделает системный вызов (GethostbyName в Windows). Это позволяет получить записи в системном кэше. Кэш маршрутизатора - Далее, предыдущий запрос на запрос отправляется на маршрутизатор, который обычно имеет свой собственный DNS -кеш. Кэш провайдера DNS - следующая вещь, которую нужно проверить, - это сервер, на котором провайдец Caches DNS. Здесь обычно можно найти соответствующие записи кэша. Рекурсивный поиск-DNS-сервер вашего ISP начинается с сервера доменных имен, с сервера доменных имен верхнего уровня .com до сервера доменных имен Facebook. Как правило, на сервере доменных имен .com на сервере доменных доменных имен.Рекурсивный поиск DNS показан на рисунке ниже:
DNS немного беспокоит, то есть все доменное имя, такое как Wikipedia.org или Facebook.com, похоже, что соответствует отдельному IP -адресу. К счастью, есть несколько способов устранить это узкое место:
Loop DNS является решением при возврате нескольких IPS при поиске DNS. Например, Facebook.com фактически соответствует четырем IP -адресам. Балансировщик нагрузки - это аппаратное устройство, которое слушает на определенном IP -адресе и пересылает сетевые запросы на сервер кластеров. Некоторые крупные сайты обычно используют этот дорогой высокопроизводительный балансировщик нагрузки. Географический DNS улучшает масштабируемость за счет отображения доменных имен с несколькими различными IP -адресами на основе географического местоположения пользователя. Таким образом, разные серверы не могут обновить статус синхронизации, но очень хорошо отобразить статический контент. Anycast - это технология маршрутизации, которая отображает несколько физических хостов с IP -адресами. Единственным недостатком является то, что протокол AnyCast и TCP плохо адаптируется, поэтому они редко используются в этих решениях.Большинство серверов DNS используют AnyCast для получения эффективных и низких задержек DNS.
3. Браузер отправляет HTTP -запрос на веб -серверПоскольку динамические страницы, такие как домашние страницы на Facebook, они скоро истекают и даже сразу же в кеше браузера после открытия, и нет никаких сомнений в том, что они не могут читать от них.
Таким образом, браузер отправит запрос на сервер, где находится Facebook:
Получить http://facebook.com/ http/1.1Принять: приложение/x-ms-application, image/jpeg, приложение/xaml+xml, [...]
Пользовательский агент: Mozilla/4.0 (совместимо; MSIE 8.0; Windows NT 6.1; WOW64; [...]
Принять по кодировке: gzip, дефту
Соединение: Keep-Alive
Хост: Facebook.com
Cookie: datr = 1265876274-[...]; locale = en_us; lsd = ww [...]; c_user = 2101 [...]
Получить этот запрос определяет URL , который будет прочитать: http://facebook.com/. Сам браузер определяет (заголовок пользователя-агента ) и какой тип соответствующего ( принять и принять заголовок) он хочет принять. Заголовок подключения требует, чтобы сервер не закрывал соединение TCP для последующих запросов.
Запрос также содержит файлы cookie для доменного имени, хранящегося в браузере. Возможно, вы уже знаете, что в разных запросах страницы файлы cookie являются значениями ключей, которые соответствуют статусу веб -сайта. Таким образом, файлы cookie будут хранить имя пользователя входа в систему, пароль с сервером и некоторые настройки пользователя. Файлы cookie хранятся в клиенте в виде текстового документа и отправляются на сервер каждый раз, когда они просят.
Есть много инструментов, чтобы посмотреть на оригинальный HTTP -запрос и его соответствующие инструменты. Автор предпочитает использовать Fiddler, и, конечно, есть другие инструменты, такие как Firebug. Это программное обеспечение может оказать большую помощь при оптимизации веб -сайта.
В дополнение к получению запросов, существует другой тип запроса, который отправляется, который часто используется при подаче форм. Отправьте запрос для передачи его параметров через URL (например, http://robozzzle.com/puzzle.aspx?id=85). Отправить запрос Отправляет его параметры после заголовка корпуса запроса.
Слуша, такие как http://facebook.com/, имеют решающее значение. В этом случае браузер может безопасно добавить черты. Для таких адресов, как http://example.com/folderorfile, поскольку браузер не знает, является ли FottomorFile папкой или файлом, он не может автоматически добавлять черты. В настоящее время браузер будет напрямую получить доступ к адресу без сокращения, и сервер будет отвечать на перенаправление, что приведет к ненужному рукопожатию.
4. Постоянный перенаправление реакции сервиса FacebookНа картинке показан ответ, отправленный в браузер сервером Facebook:
Http/1,1 301 перенесено навсегдаКонтроль кэша: частный, без магазина, без кэша, обязательна-ревалидат, после проверки = 0,
Предварительная проверка = 0
Истекает: сб, 01 января 2000 00:00:00
Расположение: http://www.facebook.com/
P3P: CP = закон DSP
Прагма: без кеша
SET-COOKIE: MADE_WRITE_CONN = DELETED; истекает = Thu, 12-Feb-2009 05:09:50 GMT;
path =/; domain = .facebook.com; httponly
Контент-тип: текст/html; charset = utf-8
X-CNECTION: закрыть
Дата: пт, 12 февраля 2010 г. 05:09:51
Длина контента: 0
Сервер отвечает на 301 постоянный ответ перенаправления, так что браузер посетит http://www.facebook.com/ вместо http://facebook.com/.
Почему сервер должен перенаправлять вместо напрямую отправлять веб -контент, который пользователи хотят видеть? Есть много интересных ответов на этот вопрос.
Одна из причин связана с рейтингом поисковых систем. Видите ли, если на странице есть два адреса, такие как http://www.igoro.com/ и http://igoro.com/, поисковые системы будут считать их двумя веб -сайтами, что приведет к уменьшению поисковых ссылок для каждого и, таким образом, снижает рейтинги. Поисковые системы знают, что означает 301 постоянный перенаправление, поэтому они классифицируют доступ к адресам с WWW и без WWW под тем же рейтингом веб -сайта.
Другое дело, что использование разных адресов приведет к тому, что кеш -дружелюбие станет хуже. Когда на странице есть несколько имен, она может появиться несколько раз в кэше.
5. Отслеживание браузера. Адрес перенаправленияТеперь браузер знает, что http://www.facebook.com/ является правильным адресом, который можно получить, поэтому он отправит еще один запрос на получение:
Получить http://www.facebook.com/ http/1.1Принять: приложение/x-ms-application, image/jpeg, приложение/xaml+xml, [...]
Принятие языка: en-us
Пользовательский агент: Mozilla/4.0 (совместимо; MSIE 8.0; Windows NT 6.1; WOW64; [...]
Принять по кодировке: gzip, дефту
Соединение: Keep-Alive
Cookie: lsd = xw [...]; c_user = 21 [...]; x-referer = [...]
Хост: www.facebook.com
Информация о заголовке имеет то же значение, что и в предыдущем запросе.
6. Сервер обрабатывает запросСервер получает запрос Fetch, затем обрабатывает и возвращает ответ.
Похоже, что это направленная задача на поверхности, но на самом деле, в середине происходит много интересных вещей - простой веб -сайт, такой как блог автора, не говоря уже о таком веб -сайте, как Facebook!
Программное обеспечение веб -сервера Программное обеспечение веб -сервера (как IIS и Apache) получает HTTP -запрос, а затем определяет, какая обработка запросов выполняется для его обработки. Обработка запроса - это программа, которая может прочитать запрос и генерировать HTML для ответа (например, ASP.NET, PHP, Ruby ...).Чтобы привести простейший пример, обработка требований может храниться в иерархии файлов, которая отображает структуру адреса сайта. Адрес, такой как http://example.com/folder1/page1.aspx, будет отображать файл /httpdocs/folder1/page1.aspx. Программное обеспечение для веб -сервера может быть установлено в соответствии с соответствующей обработкой запроса вручную по адресу, так что публикационный адрес page1.aspx может быть http://example.com/folder1/page1.
Запрос обработки Запрос обрабатывает запрос на чтение, его параметры и файлы cookie. Он будет читать и обновлять некоторые данные и скажет, что данные хранятся на сервере. Затем обработка требования генерирует HTML -ответ.Все динамичные веб -сайты сталкиваются с интересной сложностью - как хранить данные. Половина небольших сайтов будет иметь базу данных SQL для хранения данных. Хранение больших объемов данных и/или больших посещаемых сайтов должно найти некоторые способы распределения базы данных на несколько машин. Решения включают в себя: Sharding (на основе значений первичных ключей, таблицы данных разбросаны по нескольким базам данных), репликацию и упрощенные базы данных, которые используют слабую семантическую согласованность.
Делегирование работы по обработке партии - это дешевая технология для обновления данных. Например, Facebook необходимо вовремя обновлять новости, но функции людей, которых вы, возможно, знаете с поддержкой данных, должны только обновляться каждую ночь (автор предполагает, что это неизвестно, как улучшить функцию). Обновления пакетных заданий могут привести к устаревшему устаревшим данным, но могут сделать обновления данных быстрее и более краткие обновления.
7. Сервер отправляет обратный ответ HTMLИзображение - это ответ, сгенерированный и возвращаемый сервером:
Http/1.1 200 OKКонтроль кэша: частный, без магазина, без кэша, обязательна-ревалидат, после проверки = 0,
Предварительная проверка = 0
Истекает: сб, 01 января 2000 00:00:00
P3P: CP = закон DSP
Прагма: без кеша
Контент-кодирование: Gzip
Контент-тип: текст/html; charset = utf-8
X-CNECTION: закрыть
Кодирование передачи: кусочке
Дата: пт, 12 февраля 2010 09:05:55
2b3tn@[...]
Весь размер отклика составляет 35 КБ, большинство из которых передаются как тип BLOB после сортировки.
Контент, кодирующий терминал, сообщает браузеру, что весь корпус отклика сжимается с использованием алгоритма GZIP. После распаковки блока Blob, вы можете увидеть ожидаемый HTML следующим образом:<! Doctype html public -// w3c // dtd xhtml 1.0 strict // enhttp://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd>
<html xmlns = http: //www.w3.org/1999/xhtml xml: lang = en
lang = en id = facebook class = no_js>
<голова>
<meta http-equiv = content-type content = text/html; charset = utf-8 />
<meta http-equiv = content-language content = en />
...
Что касается сжатия, информация заголовка объясняет, является ли эта страница кэширована, как это сделать, если она кэширована, какие файлы cookie должны быть установлены (этот пункт не найден в предыдущем ответе), информация о конфиденциальности и т. Д.
Обратите внимание, что тип контента установлен на текст/HTML в заголовке. Заголовок позволяет браузеру отображать содержимое ответа в HTML вместо загрузки его в форме файла. Браузер решит, как интерпретировать ответ на основе информации заголовка, но также будет рассмотреть другие факторы, такие как содержание расширения URL.
8. Браузер начинает отображать HTMLКогда браузер не полностью принимает все документы HTML, он начинает отображать эту страницу:
9. Браузер отправляется, чтобы получить объекты, встроенные в HTMLКогда браузер отображает HTML, он замечает теги, которые должны получить содержимое других адресов. В настоящее время браузер отправит запрос GET для восстановления файлов.
Вот несколько URL-адресов, которые нам нужно повторно заразиться при посещении Facebook.com:
картина http://static.ak.fbcdn.net/rsrc.php/z12e0/hash/8q2anwu7.gifhttp://static.ak.fbcdn.net/rsrc.php/zbs5c/hash/7hwy7at6.gif
… Стол в стиле CSS
http://static.ak.fbcdn.net/rsrc.php/z448z/hash/2plh8s4n.css
http://static.ak.fbcdn.net/rsrc.php/zane1/hash/cvtutcee.css
... файлы JavaScript
http://static.ak.fbcdn.net/rsrc.php/zemoa/hash/c8yzb6ub.js
http://static.ak.fbcdn.net/rsrc.php/z6r9l/hash/cq2lgbs8.js
…
Все эти адреса проходят аналогичный процесс с чтением HTML. Таким образом, браузер будет искать эти доменные имена в DNS, отправлять запросы, перенаправления и т. Д.
Но в отличие от динамических страниц, статические файлы позволяют браузеру кэшировать их. Некоторым файлам может не потребоваться общение с сервером и читаются непосредственно из кэша. Ответ сервера содержит информацию о сроках для статических файлов, поэтому браузер знает, как долго их нужно кэшировать. Кроме того, каждый ответ может содержать заголовок ETAG (значение объекта запрошенной переменной), которая работает как номер версии. Если браузер отмечает, что версия ETAG Информация файла уже существует, передача файла будет немедленно остановлена.
Попробуйте угадать, что Fbcdn.net представляет в адресе? Умный ответ - это сеть дистрибуции контента Facebook. Facebook использует сеть распределения контента (CDN) для распространения статических файлов, таких как изображения, таблицы CSS и файлы JavaScript. Следовательно, эти файлы будут резервированы во многих центрах обработки данных CDN по всему миру.
Статическое содержание часто представляет размер полосы пропускания сайта, а также может быть легко скопирован через CDN. Обычно веб-сайты используют сторонние CDN. Например, статические файлы Facebook размещены Akamai, крупнейшим поставщиком CDN.
Например, когда вы пытаетесь Ping Static.ak.fbcdn.net, вы можете получить ответ от определенного сервера Akamai.net. Интересно, что когда вы снова пингите, сервер ответов может быть другим, что означает, что нагрузка, балансирующая за кулисами, начинает работать.
10. Браузер отправляет асинхронную (Ajax) запросПод руководством великого духа Web 2.0, клиент остается в контакте с сервером после завершения отображения страницы.
Возьмите функцию чата в Facebook в качестве примера, он будет поддерживать связь с сервером, чтобы своевременно обновлять ваш статус ярких и серых друзей. Чтобы обновить статус друга этих аватаров, код JavaScript, выполненный в браузере, отправит на сервер асинхронный запрос. Этот асинхронный запрос отправляется на определенный адрес, который является построенным программой запросом или отправкой. Или в примере Facebook, клиент отправляет запрос на http://www.facebook.com/ajax/chat/buddy_list.php, чтобы получить информацию о состоянии, о которой онлайн у вашего друга.
Когда дело доходит до этого шаблона, мы должны поговорить об Ajax-Asynchronous JavaScript и XML. Хотя нет четкой причины, по которой сервер отвечает в формате XML. Позвольте мне привести еще один пример. Для асинхронных запросов Facebook вернет некоторые фрагменты кода JavaScript.
Среди прочего, инструмент Fiddler позволяет вам видеть асинхронные запросы, отправленные вашим браузером. На самом деле, вы можете не только пассивно служить зрителем этих запросов, но и активно атаковать, чтобы изменить и отправлять их. Запросы Ajax так легко одурачить, но они действительно делают тех разработчиков онлайн -игр, которые набирают результаты, подавлены. (Конечно, не лгите другим, как это ~)
Функция чата в Facebook предоставляет интересный случай AJAX: выдвижение данных с сервера к клиенту. Поскольку HTTP является протоколом ответа на запрос, сервер чата не может отправлять новые сообщения клиенту. Вместо этого клиент должен опросить на стороне сервера каждые несколько секунд, чтобы увидеть, есть ли новые новости.
Опрос для этих ситуаций является интересной техникой для снижения нагрузки на сервер. Если на сервере нет новых сообщений при опросе, он игнорирует клиента. Когда новое сообщение от клиента еще не исчезло, сервер найдет незаконченный запрос и вернет новое сообщение клиенту в качестве ответа.