Принцип работы браузера: Как работают браузеры — введение в безопасность веб-приложений

Содержание

Как работают браузеры — введение в безопасность веб-приложений

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

Chrome и lynx

Браузер — это движок рендеринга. Его работа заключается в том, чтобы загрузить веб-страницу и представить её в понятном для человека виде.

Хоть это и почти преступное упрощение, но пока это все, что нам нужно знать на данный момент.

  • Пользователь вводит адрес в строке ввода браузера.
  • Браузер загружает «документ» по этому URL и отображает его.

Возможно, вы привыкли работать с одним из самых популярных браузеров, таких как Chrome, Firefox, Edge или Safari, но это не значит, что в мире нет других браузеров.

Например, lynx — это легкий текстовый браузер, работающий из командной строки. В основе lynx лежат те же самые принципы, которые вы найдете в любых других «мейнстримных» браузерах. Пользователь вводит веб-адрес (URL), браузер скачивает документ и отображает его — единственное отличие состоит в том, что lynx использует не движок графического рендеринга, а текстовый интерфейс, благодаря которому такие сайты, как Google, выглядят так:

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

Что делает браузер?

Короче говоря, работа браузера в основном состоит из

  • Разрешение DNS
  • HTTP-обмен
  • Рендеринг
  • Сброс и повтор

Разрешение DNS

Этот процесс помогает браузеру узнать, к какому серверу он должен подключиться, когда пользователь вводит URL. Браузер связывается с DNS-сервером и обнаруживает, что

google.com

соответствует набору цифр

216.58.207.110

— IP-адресу, к которому может подключиться браузер.

HTTP-обмен

Как только браузер определит, какой сервер будет обслуживать наш запрос, он установит с ним TCP-соединение и начнет

HTTP-обмен

. Это не что иное, как способ общения браузера с нужным ему сервером, а для сервера — способ отвечать на запросы браузера.

HTTP — это просто название самого популярного протокола для общения в сети, и браузеры в основном выбирают HTTP при общении с серверами. HTTP-обмен подразумевает, что клиент (наш браузер) отправляет запрос, а сервер присылает ответ.

Например, после того, как браузер успешно подключится к серверу, обслуживающему google.com, он отправит запрос, который выглядит следующим образом

GET / HTTP/1.1

Host: google.com

Accept

Давайте разберем запрос построчно:

  • GET / HTTP/1.1: этой первой строкой браузер просит сервер извлечь документ из месторасположения /, добавляя затем, что остальная часть запроса будет происходить по протоколу HTTP/1.1 (а можно так же использовать версию 1.0 или 2)
  • Host: google.com: это единственный HTTP-заголовок, обязательный для протокола HTTP/1.1. Поскольку сервер может обслуживать несколько доменов (google.com, google.co.uk и т. д.), Клиент здесь упоминает, что запрос был для этого конкретного хоста.
  • Accept: */*: необязательный заголовок, в котором браузер сообщает серверу, что он примет любой ответ. Сервер может иметь ресурс, доступный в форматах JSON, XML или HTML, поэтому он может выбирать любой формат, который предпочитает

После того, как браузер, выступающий в роли

клиента

, завершит выполнение своего запроса, сервер отправит ответ. Вот как выглядит ответ:

HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Set-Cookie: NID=1234; expires=Fri, 18-Jan-2019 18:25:04 GMT; path=/; domain=.google.com; HttpOnly
<!doctype html><html">
...
...
</html>

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

200 OK

) и добавляет к

ответу

несколько заголовков, из которых например, можно узнать, какой именно сервер обработал наш запрос (

Server: gws

), какова политика

X-XSS-Protection

этого ответа и так далее и тому подобное.

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

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

Рендеринг

Последним по счёту, но не последним по значению идет процесс рендеринга. Насколько хорош браузер, если единственное, что он покажет пользователю, это список забавных символов?

<!doctype html><html">
...
...
</html>

В теле

ответа

сервер включает представление запрашиваемого документа в соответствии с заголовком

Content-Type

. В нашем случае тип содержимого был установлен на

text/html

, поэтому мы ожидаем HTML-разметку в ответе — и именно ее мы и находим в теле документа.

Это как раз тот момент, где браузер действительно проявляет свои способности. Он считывает и анализирует HTML-код, загружает дополнительные ресурсы, включенные в разметку (например, там могут быть указаны для подгрузки JavaScript-файлы или CSS-документы) и представляет их пользователю как можно скорее.

Еще раз, конечным результатом должно стать то, что доступно для восприятия среднестатистического Васи.

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

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

Вендоры

4 самых популярных браузера принадлежат разным вендорам:

  • Chrome от Google
  • Firefox от Mozilla
  • Сафари от Apple
  • Edge от Microsoft

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

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

Например, в Chrome 51 были введены файлы cookie SameSite — функция, которая позволила веб-приложениям избавиться от определенного типа уязвимости, известной как CSRF (подробнее об этом позже). Другие производители решили, что это хорошая идея, и последовали ее примеру, что привело к тому, что подход SameSite стал веб-стандартом: на данный момент Safari является единственным крупным браузером без поддержки файлов cookie SameSite.

Это говорит нам о двух вещах:

  • Похоже, что Safari недостаточно заботится о безопасности своих пользователей (шучу: файлы cookie SameSite будут доступны в Safari 12, который, возможно, уже был выпущен к моменту прочтения этой статьи)
  • исправление уязвимости в одном браузере не означает, что все ваши пользователи в безопасности

Первый пункт — это выстрел в Safari (как я уже говорил, шучу!), а второй пункт действительно важен. При разработке веб-приложений нам нужно не только убедиться, что они выглядят одинаково в разных браузерах, но и обеспечить одинаковую защиту наших пользователей на разных платформах.

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

В нашем случае, если мы решим, что будем нейтрализовывать атаки CSRF только с помощью файлов cookie SameSite, мы должны знать, что мы подвергаем риску наших пользователей Safari. И наши пользователи тоже должны это знать.

И последнее, но не менее важное: вы должны помнить, что вы можете решить, поддерживать ли версию браузера или нет: поддержка каждой версии браузера будет непрактичной (вспомните хпро Internet Explorer 6). Несмотря на это, уверенная поддержка нескольких последних версий основных браузеров — как правило, хорошее решение. Однако, если вы не планируете предоставлять защиту на какой-то определенной платформе, очень желательно, чтобы ваши пользователи об этом знали.

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

Вендор или стандартный баг?

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

Вендоры, как правило, предоставляют вознаграждения (также известные как баг-баунти) исследователям безопасности, которые могут искать уязвимость в самом браузере. Эти ошибки связаны не с вашим веб-приложением, а с тем, как браузер самостоятельно управляет безопасностью.

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

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

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

Джейк Арчибальд (Jake Archibald) — разработчик-«адвокат» в Google, который обнаружил уязвимость, затрагивающую несколько браузеров. Он задокументировал свои усилия по ее обнаружению, процесс обращения к различным вендорам, затронутым уязвимостью, и реакцию представителей вендоров в интересном блог-посте, который я рекомендую вам прочитать.

Браузер для разработчиков

К настоящему времени мы должны были понять очень простую, но довольно важную концепцию: браузеры — это всего лишь HTTP-клиенты, созданные для «усредненного» интернет-пользователя.

Браузеры определенно более мощны, чем простой HTTP-клиент для какой-либо платформы (например, вспомните, что у NodeJS есть зависимость от ‘http’), но, в конце концов, они «просто» продукт естественной эволюции более простых HTTP-клиентов.

Что до разработчиков, нашим HTTP-клиентом, вероятно, является cURL от Daniel Stenberg, одна из самых популярных программ, которую веб-разработчики используют ежедневно. Она позволяет нам осуществлять HTTP-обмен на лету, отправляя HTTP-запрос из нашей командной строки:

$ curl -I localhost:8080
HTTP/1.1 200 OK
server: ecstatic-2.2.1
Content-Type: text/html
etag: "23724049-4096-"2018-07-20T11:20:35.526Z""
last-modified: Fri, 20 Jul 2018 11:20:35 GMT
cache-control: max-age=3600
Date: Fri, 20 Jul 2018 11:21:02 GMT
Connection: keep-alive

В приведенном выше примере мы запросили документ по адресу

localhost:8080/

, и локальный сервер успешно на него ответил.

Вместо того, чтобы выгружать тело ответа в командную строку, мы использовали флаг -I, который сообщает cURL, что нас интересуют только заголовки ответа. Сделав еще шаг вперед, мы можем дать команду cURL выдавать немного больше информации, включая фактический запрос, который он выполняет, чтобы мы могли лучше изучить весь этот HTTP-обмен. Опция, которую мы должны использовать: -v (verbose, подробнее):

$ curl -I -v localhost:8080
* Rebuilt URL to: localhost:8080/
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> HEAD / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< server: ecstatic-2.2.1
server: ecstatic-2.2.1
< Content-Type: text/html
Content-Type: text/html
< etag: "23724049-4096-"2018-07-20T11:20:35.526Z""
etag: "23724049-4096-"2018-07-20T11:20:35.526Z""
< last-modified: Fri, 20 Jul 2018 11:20:35 GMT
last-modified: Fri, 20 Jul 2018 11:20:35 GMT
< cache-control: max-age=3600
cache-control: max-age=3600
< Date: Fri, 20 Jul 2018 11:25:55 GMT
Date: Fri, 20 Jul 2018 11:25:55 GMT
< Connection: keep-alive
Connection: keep-alive
<
* Connection #0 to host localhost left intact

Примерно та же информация доступна в популярных браузерах посредством их DevTools.

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

И последнее, что я хотел бы отметить: браузером может быть все, что угодно. Если у вас есть мобильное приложение, которое использует API-интерфейсы по протоколу HTTP, то такое приложение является вашим браузером — оно просто настроено вами по индивидуальному заказу, которое распознает только определенный тип HTTP-ответов (из вашего собственного API).

Погружение в протокол HTTP

Как мы уже упоминали, что собираемся наиболее подробно осветить фазы

HTTP-обмена

и

рендеринга

, поскольку именно они предоставляют наибольшее количество

векторов атак

для злоумышленников.

В следующей статье мы более подробно рассмотрим протокол HTTP и попытаемся понять, какие меры мы должны предпринять для обеспечения безопасности HTTP-обмена.


Перевод выполнен при поддержке компании EDISON Software, которая профессионально занимается разработкой веб-сайтов для крупных заказчиков, а так же веб-разработкой на C# и .NET.

404 – страница не найдена

  • Главная страница
  • Руководства
  • Обновления
  • Поиск

Функции

  • В автономном режиме

  • Хранилище

  • Возможность подключения

  • Доступ к файлам

  • Семантика

  • Аудио/видео

  • 3D-графика

  • Презентация

  • Производительность

  • Обо всем по порядку

  • Хранилище
  • В автономном режиме
  • Возможность подключения
  • Хранилище
  • Доступ к файлам
  • Возможность подключения
  • Семантика
  • Доступ к файлам
  • Аудио/видео
  • Семантика
  • 3D-графика
  • Аудио/видео
  • Презентация
  • 3D-графика
  • Производительность
  • Презентация
  • Обо всем по порядку
  • Производительность

HTML5 Features

  • В автономном режиме

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Хранилище

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Возможность подключения

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Доступ к файлам

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Семантика

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Аудио/видео

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • 3D-графика

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Презентация

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Производительность

    • Вступление
    • Новинки
    • Темы
    • Технологии
    • Методы
    • Инструменты
    • Дополнительные материалы
  • Обо всем по порядку

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы

Oops!! We didn’t find any HTML5 resources for ya.

404 – страница не найдена

  • Главная страница
  • Руководства
  • Обновления
  • Поиск

Функции

  • В автономном режиме

  • Хранилище

  • Возможность подключения

  • Доступ к файлам

  • Семантика

  • Аудио/видео

  • 3D-графика

  • Презентация

  • Производительность

  • Обо всем по порядку

  • Хранилище
  • В автономном режиме
  • Возможность подключения
  • Хранилище
  • Доступ к файлам
  • Возможность подключения
  • Семантика
  • Доступ к файлам
  • Аудио/видео
  • Семантика
  • 3D-графика
  • Аудио/видео
  • Презентация
  • 3D-графика
  • Производительность
  • Презентация
  • Обо всем по порядку
  • Производительность

HTML5 Features

  • В автономном режиме

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Хранилище

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Возможность подключения

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Доступ к файлам

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Семантика

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Аудио/видео

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • 3D-графика

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Презентация

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Производительность

    • Вступление
    • Новинки
    • Темы
    • Технологии
    • Методы
    • Инструменты
    • Дополнительные материалы
  • Обо всем по порядку

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы

Oops!! We didn’t find any HTML5 resources for ya.

404 – страница не найдена

  • Главная страница
  • Руководства
  • Обновления
  • Поиск

Функции

  • В автономном режиме

  • Хранилище

  • Возможность подключения

  • Доступ к файлам

  • Семантика

  • Аудио/видео

  • 3D-графика

  • Презентация

  • Производительность

  • Обо всем по порядку

  • Хранилище
  • В автономном режиме
  • Возможность подключения
  • Хранилище
  • Доступ к файлам
  • Возможность подключения
  • Семантика
  • Доступ к файлам
  • Аудио/видео
  • Семантика
  • 3D-графика
  • Аудио/видео
  • Презентация
  • 3D-графика
  • Производительность
  • Презентация
  • Обо всем по порядку
  • Производительность

HTML5 Features

  • В автономном режиме

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Хранилище

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Возможность подключения

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Доступ к файлам

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Семантика

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Аудио/видео

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • 3D-графика

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Презентация

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы
  • Производительность

    • Вступление
    • Новинки
    • Темы
    • Технологии
    • Методы
    • Инструменты
    • Дополнительные материалы
  • Обо всем по порядку

    • Вступление
    • Поддержка браузеров
    • Новинки
    • Демонстрационные примеры
    • В реальных условиях
    • Ресурсы

Oops!! We didn’t find any HTML5 resources for ya.

Как работают браузеры? | Сеть без проблем

Когда дело доходит до мощного и универсального программного обеспечения, ничто не может сравниться с веб-браузером. Будь то машина Intel с архитектурой x86 или смартфон, использующий микрокод ARM; веб-браузеры предлагают феноменальную производительность на любом используемом вами оборудовании. Они настолько мощны, что могут заменить полноценную операционную систему, и Chrome OS — яркий тому пример.

Браузеры — это произведение искусства, но задумывались ли вы, что происходит за кулисами; весь процесс ввода запроса и возврата результата браузером? Что ж, в этой статье мы рассмотрим, как работает браузер и как он отображает веб-страницы за считанные секунды.

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

Чтобы отобразить веб-страницу, первое, что нужно сделать вашему браузеру, — это найти удаленный сервер, на котором размещен веб-сайт. Для этого он пытается найти IP-адрес URL-адреса, введенного вами в адресной строке. Этот IP-адрес может однозначно идентифицировать веб-сервер, и как только браузер получит этот адрес, он сможет отправлять запросы на сервер для получения данных.

Чтобы найти IP-адрес, браузер выполняет разрешение DNS, которое можно сделать только двумя способами. Он может либо заглянуть в кеш-память вашего браузера, которая может содержать IP-адрес URL-адреса, если вы посещали сайт в прошлом. Если это не так, он запрашивает у вашего интернет-провайдера, Google или Cloudflare IP-адрес определенного веб-сайта, используя их DNS-серверы.

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

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

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

Рукопожатие TLS выполняется только тогда, когда данные передаются с использованием протокола HTTPS, а в случае HTTP выполняется только рукопожатие TCP. Это не шифрует данные; поэтому вы никогда не должны отправлять конфиденциальные данные через HTTP-соединение, поскольку любой злонамеренный объект может видеть ваши данные

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

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

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

Основная задача механизма рендеринга — преобразовать биты данных в форму, которая может быть использована браузером для создания веб-страницы. Чтобы понять, как работает механизм рендеринга, важно понимать все части, из которых состоит веб-сайт.

  • HTML (язык гипертекстовой разметки) используется для определения структуры веб-страницы.
  • CSS (каскадные таблицы стилей) используются для указания браузеру, как должен выглядеть каждый элемент на веб-сайте.
  • Javascript используется для добавления интерактивности сайту и используется для обработки пользовательского ввода, кликов или любой другой обработки, которая может понадобиться сайту.

Механизм визуализации использует синтаксические анализаторы для преобразования битов данных в значимую информацию, которая может использоваться браузером для визуализации веб-страницы. Механизм рендеринга имеет два разных парсера: один для HTML и один для CSS. Давайте посмотрим, как работает анализатор HTML, чтобы получить представление о процессе синтаксического анализа.

Разбор HTML

Анализатор HTML принимает биты данных в качестве входных данных и создает логическое представление документа HTML в памяти устройства. Это логическое представление данных известно как структура DOM и представляет данные HTML в иерархическом порядке.

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

  • Характеризация извлекает символы из байтов информации, которую анализатор HTML получает с сетевого уровня.
  • Токенизация находит токены в потоке символов, который помогает браузеру определять структуру данных.
  • Создание узла После идентификации токенов и содержащейся в них информации браузер создает узлы памяти для хранения этих данных.
  • Создание DOM парсер иерархически связывает узлы памяти для создания DOM-представления полученных байтов данных.

HTML-документ, который получает браузер, содержит ссылки на файлы CSS. Эти ссылки обрабатываются сетевым уровнем и отправляются синтаксическому анализатору CSS. Этот синтаксический анализатор создает вывод CSSOM (объектная модель CSS), который определяет, как должен быть стилизован каждый элемент в DOM.

Создание дерева отрисовки и макета для веб-страницы

После создания модели DOM и завершения синтаксического анализа CSS-файла механизм визуализации использует механизм стилей для объединения как CSSOM, так и DOM. Это создает дерево визуализации, которое содержит информацию о структуре и стиле веб-страницы, которая должна отображаться. Дерево рендеринга состоит только из видимых узлов и не имеет узлов, невидимых для пользователя на экране.

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

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

Рисование холста и компоновка веб-страницы на экране

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

Операция рисования происходит в многоуровневом формате, и механизм визуализации создает несколько слоев элементов для создания веб-страницы. Эта многоуровневая структура помогает браузеру быстрее вносить изменения, когда пользователь взаимодействует с веб-страницей.

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

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

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

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

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

Механизм Javascript и структура DOM не используют одну и ту же память и являются независимыми объектами. Тем не менее, движок Javascript может взаимодействовать со структурой DOM и запускаться, когда на странице происходит определенное событие. Это различие между двумя пробелами помогает браузеру отображать страницы с помощью механизма Javascript и отображать их при возникновении события.

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

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

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

Javascript дебютировал в 1996 году и был создан Бренданом Эйхом всего за 10 дней. Он был частью Netscape Navigator версии 3 и был создан как язык сценариев, который можно было интерпретировать в самом браузере.

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

Тем не менее, эта универсальная природа Javascript имела компромисс; низкая производительность. Чтобы решить эту проблему, JIT-компиляторы пришли к Javascript, что сделало их очень быстрыми. Использование JIT-компиляторов сделало Javascript настолько быстрым, что он работает на сервере, на котором размещены ваши веб-сайты.

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

Как работает движок Javascript?

Точно так же, как сетевой уровень извлекает HTML и CSS в виде байтов для механизма рендеринга, он также извлекает код Javascript и передает его механизму Javascript.

Как только движок получает код Javascript, он отправляет его синтаксическому анализатору, который создает абстрактное синтаксическое дерево (AST). Это дерево является логическим представлением кода Javascript, который может быть запущен компилятором. Компилятор преобразует дерево в промежуточный язык (байт-код), который может выполняться интерпретатором построчно.

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

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

Как только у движка есть оптимизированный машинный код, он может запускать скрипт на невероятно высокой скорости, используя как процессор, так и интерпретатор Javascript.

Хотя браузеры сейчас супер мощные, постоянно появляются инновации, которые еще больше ускоряют просмотр. Одним из таких нововведений является веб-сборка, которая используется с Javascript, чтобы сделать выполнение кода еще быстрее за счет использования кода уровня сборки.

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

03. Как работает браузер

03. Как работает браузер



03. Как работает браузер



Рассмотрим сначала общие принципы работы браузера, затем более
подробно опишем его работу с учетом разделения элементов
на блочные и строчные. Наконец, приведём уточнённые правила построения
браузером самого распространённого элемента на страницах — абзаца.

Общие принципы



Браузер, интерпретируя HTML-код, формирует на
экране документ, который видит пользователь. Элементы отображаются
последовательно — слева направо (строчные) и сверху вниз
(блочные), в соответствии с порядком следования элементов в
HTML-коде. Нельзя написать код на “чистом” HTML так,
чтобы браузер сначала нарисовал линию в нижней части экрана, а потом
вывел текст в верхней.


Когда рисование программируют на Бейсике или Си, есть возможность
вывести элемент в любое место экрана по своему усмотрению.
HTML-программы таким свойством не обладают. HTML не работает с
экранными координатами.


Программируя на HTML, нельзя ориентироваться на определенные размеры
окна документа. Браузер использует то окно, которое предоставил ему
пользователь. Значит, одна и та же HTML-страница может отображаться
на экране немного по-разному на разных компьютерах и даже на одном
компьютере, если настроить его по-другому: изменить разрешение экрана
или размеры окна браузера.


В одном окне можно увидеть такой документ:


Тот же самый документ в другом окне смотрится по-другому:


Проверьте: Первый HTML-документ


Видно, что длина линии HR зависит от размеров окна.
Заголовок h2 вынужден занять 2 строки. Абзац P
выводится так, чтобы поместиться в окне. При этом браузер не
обращает внимания на то, как строки абзаца размещены в HTML-коде.


Все эти “причуды” браузера заставляют новичка на вопрос
“Как работает браузер?” ответить кратко: “Плохо!”
Однако отмеченные минусы — это лишь плата за
универсальность HTML-кода. И, надо сказать, плата не так высока.


Обозначенные ограничения оборачиваются положительной стороной HTML,
делая его независимым от компьютерной платформы (DOS, Windows, Unix,
MacOs, …) и параметров видеовывода конкретного компьютера (CGA,
EGA, VGA, SVGA, …), в частности, от количества экранных точек
(пикселов) и текущих размеров окна браузера.


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

Уточненные правила работы браузера



Опишем более подробно правила работы браузера.


Элемент HTML визуально совпадает с окном браузера. В него
вложен элемент BODY, который по умолчанию имеет отступы
от границ родителя (то есть от границ окна).


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


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


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


Если в блоке есть смесь блочных и строчных элементов (на уровне
прямых потомков), то все строчные элементы (а также неразмеченный
текст) собираются в безымянные блоки и строятся по описанным выше
правилам построения блоков.


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


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


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


Такую работу браузера называют вёрсткой потоком, а в силу
подгонки материала под текущий размер окна —
резиновой вёрсткой.

Правила построения абзаца



Абзац — блочный элемент, поэтому правила его построения
подчиняется общим правилам построения блока: блок выводится
прямоугольником во всю ширину родительского элемента. Если абзац является
прямым потомком BODY, его ширина совпадает с шириной
окна браузера (не считая предопределённых отступов BODY от
рамки окна).


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


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


Таким образом, правила построения абзаца можно сформулировать
следующим образом:


  1. Перед абзацем формируется промежуток размером в одну строку.

  2. Абзац выравнивается по левому краю (для языков с написанием слева направо).

  3. Между словами помещается ровно по одному пробелу независимо от того,
    сколько пробелов проставлено в HTML-коде.

  4. Перенос текста на новую строку выполняется, если очередное слово не
    помещается в экранной строке, а не тогда, когда в HTML-коде начинается
    новая строка.

  5. После абзаца формируется промежуток размером в одну строку.


В дополнение к приведённым правилам отметим, что промежутки между
абзацами не удваиваются. Это эффект называется схлопыванием,
он подробно рассматривается в разделе
Тема 2/Стилевые свойства/Внешние отступы
(ссылка).







Что такое веб-приложения и динамические веб-страницы

Сервер приложений предоставляет возможность использовать такие ресурсы сервера, как базы данных. Например, динамическая страница может содержать программные инструкции для сервера приложений, следуя которым серверу необходимо получить определенные данные из базы данных и поместить их в HTML-код страницы. Подробнее см. здесь: www.adobe.com/go/learn_dw_dbguide_ru.

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

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

Сервер приложений не может непосредственно получить данные из базы, поскольку базы данных используют специфические форматы хранения данных, в результате чего попытка получения таких данных будет напоминать попытку открытия документа Microsoft Word с помощью текстового редактора Notepad или BBEdit. Поэтому для подключения к базе данных сервер приложений использует посредника — драйвер базы данных. Драйвер базы данных представляет собой программный модуль, с помощью которого устанавливается взаимодействие между сервером приложений и базой данных.

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

Ниже приводится пример простого запроса к базе данных на языке SQL.

Что такое веб-браузер?

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

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

Важно, чтобы у всех был доступ к Интернету, но также важно, чтобы мы все понимали, какие инструменты мы используем для доступа к нему. Мы используем такие веб-браузеры, как Mozilla Firefox, Google Chrome, Microsoft Edge и Apple Safari каждый день, но понимаем ли мы, что это такое и как они работают?
За короткий промежуток времени мы перестали удивляться возможности отправлять электронные письма кому-то по всему миру, к изменению нашего отношения к информации. Это уже не вопрос того, сколько вы знаете, а просто вопрос, какой браузер или приложение может предоставить вам эту информацию быстрее всего.

Как работает веб-браузер?

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

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

Когда веб-браузер получает данные с сервера, подключенного к Интернету, он использует часть программного обеспечения, называемую механизмом визуализации, для преобразования этих данных в текст и изображения.Эти данные записываются на языке гипертекстовой разметки (HTML), и веб-браузеры читают этот код, чтобы создать то, что мы видим, слышим и испытываем в Интернете.

Гиперссылки позволяют пользователям переходить по пути к другим страницам или сайтам в Интернете. Каждая веб-страница, изображение и видео имеет свой собственный уникальный унифицированный указатель ресурсов (URL), который также известен как веб-адрес. Когда браузер посещает сервер для получения данных, веб-адрес сообщает браузеру, где искать каждый элемент, описанный в html, который затем сообщает браузеру, где он находится на веб-странице.

Печенье (не вкусное)

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

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

Понимание конфиденциальности

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

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

Заставьте ваш веб-браузер работать на вас

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

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

Заполнение страницы: как работают браузеры — производительность в Интернете

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

Чтобы понять, как улучшить производительность и воспринимаемую производительность, полезно понять, как работает браузер.

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

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

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

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

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

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

Поиск в DNS

Первым шагом при переходе на веб-страницу является поиск, где расположены ресурсы для этой страницы.Если вы перейдете на https://example.com , HTML-страница будет расположена на сервере с IP-адресом 93.184.216.34 . Если вы никогда не посещали этот сайт, необходимо выполнить поиск DNS.

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

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

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

TCP-рукопожатие

После того, как IP-адрес известен, браузер устанавливает соединение с сервером посредством трехстороннего TCP-подтверждения. Этот механизм разработан таким образом, что два объекта, пытающиеся обмениваться данными — в данном случае браузер и веб-сервер — могут согласовывать параметры сетевого TCP-сокета перед передачей данных, часто через HTTPS.

Техника трехстороннего установления связи

TCP часто упоминается как «SYN-SYN-ACK» — или, точнее, SYN, SYN-ACK, ACK — потому что TCP передает три сообщения для согласования и запуска сеанса TCP между двумя компьютерами.Да, это означает еще три сообщения между каждым сервером, и запрос еще не отправлен.

Согласование TLS

Для безопасных соединений, установленных через HTTPS, требуется еще одно «рукопожатие». Это рукопожатие, или, скорее, согласование TLS, определяет, какой шифр будет использоваться для шифрования связи, проверяет сервер и устанавливает наличие безопасного соединения перед началом фактической передачи данных. Это требует еще трех циклов обращения к серверу перед фактической отправкой запроса на контент.

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

После 8 циклов приема-передачи браузер, наконец, может сделать запрос.

После того, как мы установили соединение с веб-сервером, браузер отправляет начальный запрос HTTP GET от имени пользователя, который для веб-сайтов чаще всего является файлом HTML.Как только сервер получит запрос, он ответит с соответствующими заголовками ответа и содержимым HTML.

  

 
  
   Моя простая страница 
  
  


  

Моя страница

Абзац со ссылкой

 описание изображения

Этот ответ на этот начальный запрос содержит первый байт полученных данных. Время до первого байта (TTFB) — это время между моментом, когда пользователь сделал запрос, скажем, щелкнув ссылку, и получением этого первого пакета HTML. Первый фрагмент содержимого обычно составляет 14 КБ данных.

В нашем примере выше размер запроса определенно меньше 14 КБ, но связанные ресурсы не запрашиваются до тех пор, пока браузер не обнаружит ссылки во время синтаксического анализа, как описано ниже.

TCP Slow Start / 14kb rule

Первый ответный пакет будет 14Kb. Это часть медленного запуска TCP, алгоритма, который уравновешивает скорость сетевого соединения. При медленном запуске объем передаваемых данных постепенно увеличивается до тех пор, пока не будет определена максимальная пропускная способность сети.

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

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

Контроль перегрузки

Когда сервер отправляет данные в пакетах TCP, клиент пользователя подтверждает доставку, возвращая подтверждения или ACK.Возможности подключения ограничены в зависимости от оборудования и состояния сети. Если сервер отправляет слишком много пакетов слишком быстро, они будут отброшены. То есть подтверждения не будет. Сервер регистрирует это как отсутствующие ACK. Алгоритмы управления перегрузкой используют этот поток отправленных пакетов и ACK для определения скорости отправки.

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

Модель DOM — это внутреннее представление разметки браузера. Модель DOM также доступна, и ею можно управлять с помощью различных API в JavaScript.

Даже если HTML-код страницы запроса больше, чем исходный пакет 14 КБ, браузер начнет анализировать и пытаться отобразить взаимодействие на основе имеющихся данных. Вот почему для оптимизации веб-производительности важно включить в первые 14 килобайт все, что нужно браузеру для начала рендеринга страницы, или хотя бы шаблон страницы — CSS и HTML, необходимые для первого рендеринга.Но прежде чем что-либо отобразится на экране, необходимо проанализировать HTML, CSS и JavaScript.

Построение дерева DOM

Мы опишем пять шагов на критическом пути рендеринга.

Первым шагом является обработка разметки HTML и построение дерева DOM. Анализ HTML включает токенизацию и построение дерева. Токены HTML включают в себя начальный и конечный теги, а также имена и значения атрибутов. Если документ правильно сформирован, разбор будет простым и быстрым. Парсер анализирует токенизированные входные данные в документе, строя дерево документа.

Дерево DOM описывает содержимое документа. Элемент — это первый тег и корневой узел дерева документа. Дерево отражает отношения и иерархии между различными тегами. Теги, вложенные в другие теги, являются дочерними узлами. Чем больше количество узлов DOM, тем больше времени требуется для построения дерева DOM.

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

В этом примере, пока основной поток анализирует HTML и CSS, сканер предварительной загрузки найдет сценарии и изображение и также начнет их загрузку. Чтобы сценарий не блокировал процесс, добавьте атрибут async или атрибут defer , если синтаксический анализ и порядок выполнения JavaScript не важны.

Ожидание получения CSS не блокирует синтаксический анализ или загрузку HTML, но блокирует JavaScript, потому что JavaScript часто используется для запроса влияния свойств CSS на элементы.

Построение CSSOM

Вторым этапом критического пути рендеринга является обработка CSS и построение дерева CSSOM. Объектная модель CSS похожа на DOM. И DOM, и CSSOM - это деревья. Это независимые структуры данных. Браузер преобразует правила CSS в карту стилей, с которыми он может работать. Браузер просматривает каждый набор правил в CSS, создавая дерево узлов с родительскими, дочерними и одноуровневыми отношениями на основе селекторов CSS.

Как и в случае с HTML, браузеру необходимо преобразовать полученные правила CSS во что-то, с чем он может работать.Следовательно, он повторяет процесс преобразования HTML в объект, но для CSS.

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

Создание CSSOM происходит очень и очень быстро, и в текущих инструментах разработчика он не отображается в уникальном цвете. Скорее, «Пересчитать стиль» в инструментах разработчика показывает общее время, необходимое для синтаксического анализа CSS, построения дерева CSSOM и рекурсивного вычисления вычисленных стилей.С точки зрения оптимизации веб-производительности, есть меньшие висячие плоды, поскольку общее время создания CSSOM обычно меньше, чем время, необходимое для одного поиска DNS.

Другие процессы

Компиляция JavaScript

Пока CSS анализируется и создается CSSOM, загружаются другие ресурсы, включая файлы JavaScript (благодаря сканеру предварительной загрузки). JavaScript интерпретируется, компилируется, анализируется и выполняется. Скрипты разбираются на абстрактные синтаксические деревья.Некоторые браузерные движки берут абстрактное синтаксическое дерево и передают его интерпретатору, выводя байт-код, который выполняется в основном потоке. Это известно как компиляция JavaScript.

Создание дерева доступности

Браузер также создает дерево доступности, которое вспомогательные устройства используют для анализа и интерпретации контента. Объектная модель доступности (AOM) похожа на семантическую версию DOM. Браузер обновляет дерево доступности при обновлении DOM. Дерево доступности не может быть изменено самими вспомогательными технологиями.

Пока AOM не построен, содержимое недоступно для программ чтения с экрана.

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

Стиль

Третий шаг на критическом пути рендеринга - объединение DOM и CSSOM в дерево рендеринга. Построение вычисленного дерева стилей или дерева рендеринга начинается с корня дерева DOM, проходящего через каждый видимый узел.

Теги, которые не будут отображаться, например и его дочерние элементы и любые узлы с display: none , такие как сценарий {display: none; } , которые вы найдете в таблицах стилей пользовательских агентов, не включены в дерево рендеринга, так как они не будут отображаться в рендеринге вывода.Узлы с видимостью : применено скрытое , включаются в дерево рендеринга, так как они занимают место. Поскольку мы не указали никаких директив для переопределения пользовательского агента по умолчанию, узел сценария в нашем примере кода выше не будет включен в дерево рендеринга.

К каждому видимому узлу применяются свои правила CSSOM. Дерево рендеринга содержит все видимые узлы с содержимым и вычисленными стилями - сопоставление всех соответствующих стилей с каждым видимым узлом в дереве DOM и определение на основе каскада CSS вычисленных стилей для каждого узла.

Макет

Четвертый шаг в критическом пути рендеринга - запуск компоновки в дереве рендеринга для вычисления геометрии каждого узла. Макет - это процесс, посредством которого определяются ширина, высота и расположение всех узлов в дереве визуализации, а также определение размера и положения каждого объекта на странице. Reflow - это любое последующее определение размера и положения любой части страницы или всего документа.

Как только дерево рендеринга построено, начинается разметка.Дерево рендеринга определяет, какие узлы отображаются (даже если они невидимы) вместе с их вычисленными стилями, но не размеры или расположение каждого узла. Чтобы определить точный размер и расположение каждого объекта, браузер запускается в корне дерева визуализации и проходит по нему.

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

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

Paint

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

Чтобы обеспечить плавную прокрутку и анимацию, все, что занимает основной поток, включая вычисление стилей, а также перекомпоновку и рисование, должно занимать у браузера менее 16,67 мсек. При разрешении 2048 X 1536 экран iPad имеет более 3145000 пикселей. Это много пикселей, которые нужно очень быстро раскрасить. Чтобы гарантировать, что перекраска может быть выполнена даже быстрее, чем начальная окраска, рисунок на экране обычно разбивается на несколько слоев.Если это происходит, то необходимо композитинг.

Рисование может разбивать элементы в дереве компоновки на слои. Размещение содержимого в слоях на графическом процессоре (вместо основного потока на центральном процессоре) улучшает производительность рисования и перерисовки. Существуют определенные свойства и элементы, которые создают экземпляр слоя, включая и , а также любой элемент, который имеет свойства CSS , непрозрачность , 3D-преобразование , изменит и несколько других.Эти узлы будут нарисованы на своем собственном слое вместе со своими потомками, если только потомку не потребуется собственный слой по одной (или нескольким) из вышеуказанных причин.

Слои

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

Композиция

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

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

Как только основной поток закончит рисовать страницу, можно подумать, что все готово."Это не обязательно так. Если загрузка включает JavaScript, который был правильно отложен и выполняется только после срабатывания события onload , основной поток может быть занят и недоступен для прокрутки, касания и других взаимодействий.

Время до взаимодействия (TTI) - это измерение того, сколько времени прошло от первого запроса, который привел к поиску DNS и SSL-соединению, до того момента, когда страница стала интерактивной. реагирует на действия пользователя в течение 50 мс.Если основной поток занят синтаксическим анализом, компиляцией и выполнением JavaScript, он недоступен и, следовательно, не может своевременно (менее 50 мс) отвечать на действия пользователя.

В нашем примере, возможно, изображение загружалось быстро, но, возможно, файл anotherscript.js был размером 2 МБ, а сетевое соединение нашего пользователя было медленным. В этом случае пользователь увидит страницу очень быстро, но не сможет прокручивать без рывков, пока скрипт не будет загружен, проанализирован и выполнен.Это не лучший пользовательский опыт. Избегайте использования основного потока, как показано в этом примере WebPageTest:

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

Как работают веб-браузеры ?. Браузер - это программное приложение… | Моника Рагхуванши

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

Современные браузеры представляют собой полнофункциональные программные комплексы, которые могут интерпретировать и отображать веб-страницы HTML, приложения, JavaScript, AJAX и другой контент, размещенный на веб-серверах. Многие браузеры предлагают плагины, которые расширяют возможности программного обеспечения, чтобы оно могло отображать мультимедийную информацию (включая звук и видео), или браузер можно использовать для выполнения таких задач, как видеоконференции, для разработки веб-страниц или добавления антифишинговых фильтров и другие функции безопасности браузера.

Браузер - это группа структурированных кодов, которые вместе выполняют ряд задач по отображению веб-страницы на экране. В соответствии с выполняемыми задачами эти коды выполнены в виде разных компонентов.

Высокоуровневая архитектура браузера

На рисунке ниже показаны основные компоненты веб-браузера:

Основные компоненты браузера

  1. Пользовательский интерфейс : Пользовательский интерфейс - это пространство, в котором Пользователь взаимодействует с браузером. Он включает в себя адресную строку, кнопки «Назад» и «Далее», кнопку «Домой», «Обновление и остановку», опцию закладок и т. Д.Все остальные части, кроме окна, в котором отображается запрошенная веб-страница, находятся под ним.
  2. Механизм браузера : Механизм браузера работает как мост между пользовательским интерфейсом и механизмом рендеринга. В соответствии с входными данными от различных пользовательских интерфейсов он запрашивает и манипулирует движком рендеринга.
  3. Механизм рендеринга : Механизм рендеринга, как следует из названия, отвечает за рендеринг запрошенной веб-страницы на экране браузера. Механизм визуализации интерпретирует HTML, XML-документы и изображения, отформатированные с помощью CSS, и генерирует макет, отображаемый в пользовательском интерфейсе.Однако, используя плагины или расширения, он также может отображать данные других типов. В разных браузерах используются разные механизмы рендеринга:
    * Internet Explorer: Trident
    * Firefox и другие браузеры Mozilla: Gecko
    * Chrome и Opera 15+: Blink
    * Chrome (iPhone) и Safari: Webkit
  4. Сеть : компонент браузер, который получает URL-адреса с помощью распространенных интернет-протоколов HTTP или FTP. Сетевой компонент обрабатывает все аспекты интернет-коммуникации и безопасности.Сетевой компонент может реализовать кэш извлеченных документов, чтобы уменьшить сетевой трафик.
  5. Интерпретатор JavaScript: Это компонент браузера, который интерпретирует и выполняет код JavaScript, встроенный в веб-сайт. Интерпретированные результаты отправляются механизму рендеринга для отображения. Если сценарий внешний, то сначала ресурс извлекается из сети. Парсер остается в ожидании, пока скрипт не будет выполнен.
  6. Backend пользовательского интерфейса : Backend пользовательского интерфейса используется для рисования основных виджетов, таких как поля со списком и окна.Этот бэкэнд предоставляет общий интерфейс, не зависящий от платформы. Внизу используются методы пользовательского интерфейса операционной системы.
  7. Сохранение / хранение данных: Это уровень сохраняемости. Браузеры поддерживают такие механизмы хранения, как localStorage, IndexedDB, WebSQL и FileSystem. Это небольшая база данных, созданная на локальном диске компьютера, на котором установлен браузер. Он управляет данными пользователя, такими как кеш, файлы cookie, закладки и настройки.

Здесь важно отметить, что в веб-браузерах, таких как Google Chrome, каждая вкладка выполняется в отдельном процессе (несколько экземпляров механизма рендеринга).

Сетевой уровень начнет отправлять содержимое запрошенных документов механизму рендеринга фрагментами по 8 КБ.

Базовый поток механизма рендеринга

Механизм рендеринга анализирует фрагменты документа HTML и преобразует элементы в узлы DOM в дереве, называемом «дерево данных c » или «дерево DOM ». Он также анализирует как внешние файлы CSS, так и элементы стиля.

Пока строится дерево DOM, браузер строит другое дерево, дерево рендеринга .Это дерево состоит из визуальных элементов в том порядке, в котором они будут отображаться. Это визуальное представление документа. Назначение этого дерева - дать возможность раскрасить содержимое в правильном порядке. Firefox называет элементы в дереве визуализации «фреймами». WebKit использует термин «средство визуализации» или «объект визуализации».

После построения дерева рендеринга оно проходит через «процесс компоновки , » дерева рендеринга. Когда средство визуализации создается и добавляется к дереву, у него нет позиции и размера.Процесс вычисления этих значений называется макетом или перекомпоновкой. Это означает присвоение каждому узлу точных координат, где он должен появиться на экране. Положение корневого средства визуализации - 0,0, а его размеры - это область просмотра - видимая часть окна браузера. Все средства визуализации имеют метод «макета» или «перекомпоновки», каждый модуль визуализации вызывает метод макета своих дочерних элементов, которым требуется макет.

Следующий этап - покраска . На этапе рисования выполняется обход дерева визуализации и вызывается метод «paint ()» средства визуализации для отображения содержимого на экране.Рисование использует внутренний слой пользовательского интерфейса.

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

Ссылки: https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/#Resources
https: // image.slidesharecdn.com/howbrowserwork-140714233410-phpapp01/95/how-browser-work-19-638.jpg?cb=1405397055

Как работают браузеры

, Алекс Надалин

Введение в безопасность веб-приложений

Фото Лиама Такера на Unsplash

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

Браузер - это механизм рендеринга . Его задача - загрузить веб-страницу и отобразить ее в понятном для человека виде.

Хотя это почти преступное упрощение, это все, что нам нужно знать на данный момент.

  • Пользователь вводит адрес в строке браузера.
  • Браузер загружает «документ» по этому URL-адресу и отображает его.

Возможно, вы привыкли работать с одним из самых популярных браузеров, например Chrome, Firefox, Edge или Safari, но это не означает, что других браузеров нет.

lynx, например, представляет собой легкий текстовый браузер, который работает из командной строки. В основе lynx лежат те же самые принципы, которые вы найдете в любых других «основных» браузерах. Пользователь вводит веб-адрес (URL), браузер извлекает документ и отображает его - единственная разница заключается в том, что lynx не использует движок визуального рендеринга, а использует текстовый интерфейс, что делает такие сайты, как Google. :

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

Что делает браузер?

Короче говоря, работа браузера в основном состоит из:

  • Разрешения DNS
  • HTTP-обмена
  • Рендеринга
  • Промыть и повторить

Разрешение DNS

Этот процесс гарантирует, что как только пользователь введет URL , браузер знает, к какому серверу он должен подключиться. Браузер связывается с DNS-сервером и обнаруживает, что google.com преобразуется в 216.58.207.110 , IP-адрес, к которому браузер может подключиться.

HTTP Exchange

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

HTTP - это просто название самого популярного протокола для общения в Интернете, и браузеры в основном общаются через HTTP при взаимодействии с серверами. При HTTP-обмене клиент (наш браузер) отправляет запрос , а сервер отвечает ответом .

Например, после того, как браузер успешно подключился к серверу за google.com , он отправит запрос, который выглядит следующим образом:

  GET / HTTP / 1.1Host: google.comAccept: * / *  

Давайте разберем запрос построчно:

  • GET / HTTP / 1.1 : в этой первой строке браузер просит сервер получить документ в местоположении /, добавляя, что остальная часть запрос будет следовать HTTP / 1.1 (он также может использовать 1.0 или 2 )
  • Хост: google.com : это , единственный HTTP-заголовок, обязательный в HTTP / 1.1 . Поскольку сервер может обслуживать несколько доменов ( google.com , google.co.uk и т. Д.), Здесь клиент упоминает, что запрос был для этого конкретного хоста
  • Accept: * / * : необязательный заголовок, где браузер сообщает серверу, что он примет ответ любого типа. Сервер может иметь ресурс, доступный в форматах JSON, XML или HTML, поэтому он может выбрать любой формат, который ему больше нравится. сервер, чтобы ответить.Вот как выглядит ответ:

      HTTP / 1.1 200 OKCache-Control: private, max-age = 0Content-Type: text / html; charset = ISO-8859-1 Сервер: gwsX-XSS-Защита: 1; mode = blockX-Frame-Options: SAMEORIGINSet-Cookie: NID = 1234; expires = Fri, 18-Jan-2019 18:25:04 GMT; путь = /; домен = .google.com; HttpOnly  
        ......   

    Ого, это много информации для обработки. Сервер сообщает нам, что запрос был успешным ( 200 OK ) и добавляет несколько заголовков к ответу , например, он объявляет, какой сервер обработал наш запрос ( Server: gws ), какова политика X-XSS-Protection этого ответа и так далее и так далее. вперед.

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

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

    Рендеринг

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

       ......   

    В теле ответа сервер включает представление ответа в соответствии с заголовком Content-Type . В нашем случае тип содержимого был установлен на text / html , поэтому мы ожидаем разметки HTML в ответе - это именно то, что мы находим в теле.

    Именно здесь браузер действительно сияет. Он анализирует HTML, загружает дополнительные ресурсы, включенные в разметку (например, могут быть файлы JavaScript или документы CSS для выборки), и представляет их пользователю как можно скорее.

    И снова конечный результат - это то, что средний Джо может понять.

    Для более подробной версии того, что на самом деле происходит, когда мы нажимаем Enter в адресной строке браузера, я бы посоветовал прочитать «Что происходит, когда…» - очень сложная попытка объяснить механику этого процесса.

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

    Поставщики

    Четыре самых популярных браузера принадлежат разным производителям:

    • Chrome от Google
    • Firefox от Mozilla
    • Safari от Apple
    • Edge от Microsoft

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

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

    Chrome 51, например, представил файлы cookie SameSite, функцию, которая позволяет веб-приложениям избавляться от определенного типа уязвимости, известной как CSRF (подробнее об этом позже). Другие поставщики решили, что это хорошая идея, и последовали их примеру, в результате чего SameSite стал веб-стандартом: на данный момент Safari является единственным крупным браузером без поддержки файлов cookie SameSite.

    Это говорит нам о двух вещах:

    • Safari, похоже, недостаточно заботится о безопасности своих пользователей (шутка: файлы cookie SameSite будут доступны в Safari 12, которые, возможно, уже были выпущены к тому моменту, когда вы читаете это article)
    • исправление уязвимости в одном браузере не означает, что все ваши пользователи в безопасности

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

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

    В нашем случае, если мы решим, что собираемся смягчить CSRF-атаки только с помощью файлов cookie SameSite, мы должны знать, что подвергаем риску пользователей Safari. И наши пользователи должны это знать.

    И последнее, но не менее важное: вы должны помнить, что вы можете решить, поддерживать ли версию браузера или нет: поддержка каждой версии браузера была бы непрактичной (подумайте об Internet Explorer 6). Однако убедиться, что последние несколько версий основных браузеров поддерживаются, как правило, является хорошим решением.Однако, если вы не планируете предлагать защиту на определенной платформе, обычно рекомендуется сообщить об этом своим пользователям.

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

    Вендор или стандартная ошибка?

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

    Продавцы обычно предоставляют вознаграждение (также известное как bug bounties ) исследователям безопасности, которые могут найти уязвимость в самом браузере. Эти ошибки связаны не с вашей реализацией, а скорее с тем, как браузер самостоятельно обеспечивает безопасность.

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

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

    В программе Bug Bounty выигрывают все: поставщику удается повысить безопасность своего программного обеспечения, а исследователям платят за свои выводы. Мы обсудим эти программы позже, поскольку я считаю, что инициативы Bug Bounty заслуживают отдельного раздела в сфере безопасности.

    Джейк Арчибальд (Jake Archibald), защитник разработчиков в Google, недавно обнаружил уязвимость, затрагивающую несколько браузеров. Он задокументировал свои усилия, подходы к различным поставщикам и их реакцию в интересном сообщении в блоге, которое я рекомендую вам прочитать.

    Браузер для разработчиков

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

    Они определенно более мощные, чем простой HTTP-клиент платформы (вспомните, например, NodeJS require ('http') ), но, в конце концов, они «просто» естественная эволюция более простого HTTP. клиентов.

    Как разработчики, нашим HTTP-клиентом, вероятно, является cURL Даниэля Стенберга, одного из самых популярных программ, которые веб-разработчики используют ежедневно. Это позволяет нам выполнять HTTP-обмен на лету, отправляя HTTP-запрос из нашей командной строки:

      $ curl -I localhost: 8080  
      HTTP / 1.1200 OKserver: ecstatic-2.2.1Content-Type: text / htmletag: "23724049-4096-" 2018-07-20T11: 20: 35.526Z "" последнее изменение: пт, 20 июля 2018 г. 11:20:35 GMTcache- control: max-age = 3600 Дата: Пт, 20 июля 2018 г., 11:21:02 GMTConnection: keep-alive  

    В приведенном выше примере мы запросили документ по адресу localhost: 8080/, и локальный сервер успешно ответил .

    Вместо того, чтобы выгружать тело ответа в командную строку, здесь мы использовали флаг -I , который сообщает cURL, что нас интересуют только заголовки ответа.Сделав еще один шаг вперед, мы можем проинструктировать cURL сбрасывать немного больше информации, включая фактический запрос, который он выполняет, чтобы мы могли лучше рассмотреть весь этот HTTP-обмен. Нам нужно использовать вариант -v (подробный):

      $ curl -I -v localhost: 8080 * URL-адрес перестроен на: localhost: 8080 / * Попытка 127.0.0.1 ... * Подключено к localhost (127.0 .0.1) порт 8080 (# 0)> HEAD / HTTP / 1.1> Host: localhost: 8080> User-Agent: curl / 7.47.0> Accept: * / *>  
      <* Соединение № 0 с локальным хостом остается неизменным  

    Примерно такая же информация доступна в основных браузерах через их DevTools.

    Как мы видели, браузеры - это не что иное, как сложные HTTP-клиенты. Конечно, они добавляют огромное количество функций (подумайте об управлении учетными данными, закладках, истории и т. Д.), Но правда в том, что они родились как HTTP-клиенты для людей. Это важно, так как в большинстве случаев вам не нужен браузер для проверки безопасности вашего веб-приложения, вы можете просто «свернуть его» и посмотреть на ответ.

    И последнее, что я хотел бы отметить, это то, что что угодно может быть браузером .Если у вас есть мобильное приложение, которое использует API-интерфейсы через протокол HTTP, тогда это приложение является вашим браузером - это просто приложение, созданное вами самостоятельно, которое понимает только определенный тип HTTP-ответов (от вашего собственного API). .

    В протокол HTTP

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

    В следующей статье мы более подробно рассмотрим протокол HTTP и попытаемся понять, какие меры мы должны предпринять, чтобы защитить обмен данными по протоколу HTTP.

    Первоначально опубликовано на odino.org (29 июля 2018 г.).
    Следите за мной в Твиттере - тирады приветствуются! ?

    Что такое веб-браузер и как он работает?

    Примеры веб-браузеров

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

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

    Google Chrome

    Google Chrome , занимающий 70% мирового рынка, является самым популярным веб-браузером.Популярность Chrome частично объясняется его высокой скоростью просмотра и простой интеграцией с вашей личной учетной записью Google, что делает его наиболее удобным браузером для многих людей. Благодаря самой большой библиотеке расширений среди ведущих браузеров, Chrome также является чрезвычайно простым интернет-браузером для модификации и настройки.

    Safari

    Safari - это веб-браузер по умолчанию для всех устройств Apple: Mac, iPad и iPhone. Хотя у большинства людей нет компьютеров Mac, у многих есть iPhone и iPad.Фактически, Safari - самый популярный мобильный веб-браузер в США. И хотя использование компьютера явно отличается от мобильного устройства, внешний вид Safari одинаков на всех устройствах Apple.

    Microsoft Edge (ранее Internet Explorer)

    Применив старый и устаревший Internet Explorer, Microsoft Edge - новый флагманский браузер Microsoft. Этот веб-браузер входит в стандартную комплектацию любого устройства, на котором установлена ​​операционная система Microsoft Windows.Edge построен на платформе браузера Chromium, которая также лежит в основе Chrome и других браузеров.

    Mozilla Firefox

    Когда-то одно из самых популярных веб-браузерных приложений в США - и преемник Netscape Navigator, одного из первых коммерчески успешных веб-браузеров - Firefox недавно уступил долю рынка Chrome и Safari. Но, несмотря на падение популярности, Firefox по-прежнему может похвастаться небольшим и лояльным сообществом, предлагая браузерные функции, аналогичные его более доминирующим конкурентам.

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

    Opera

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

    Безопасный браузер Avast

    Все перечисленные выше браузеры имеют свои собственные режимы приватного просмотра, но только Avast Secure Browser делает безопасный и конфиденциальный просмотр своим главным атрибутом, а не просто опцией или второстепенным атрибутом. Его обширный список функций безопасности и конфиденциальности включает встроенную защиту от фишинга, веб-отслеживания и снятия отпечатков пальцев браузера. Он также включает в себя встроенный блокировщик рекламы и предлагает простые в настройке автоматические предупреждения безопасности.

    Большинство из этих функций включены по умолчанию или могут быть легко включены, что делает Avast Secure Browser лучшим решением для всех, кто хочет защитить свою конфиденциальность и безопасность в Интернете.Попробуйте это сегодня и убедитесь в этом сами.

    Как работает браузер?

    Веб-браузер отправляет и получает информацию (данные) в другие части сети и из них. Полученная информация отображается в окне вашего браузера. Данные передаются с использованием протокола передачи гипертекста (http), метода, который определяет, как текст, изображения и видеофайлы передаются по сети.

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

    Для отправки и получения данных у веб-браузеров также есть менее заметная сторона, которая называется бэкэнд . Бэкэнд (серверы, базы данных, приложения) отправляет ваши запросы через Интернет и возвращает полученные данные, чтобы вы могли подключаться к веб-сайтам, которые хотите посетить, и взаимодействовать с ними.

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

    Вот что такое веб-браузер и как он работает. Теперь давайте сосредоточимся на самых основных функциях веб-браузера.

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

    Каковы наиболее общие функции веб-браузера?

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

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

    Окно веб-браузера

    Окно веб-браузера (или пользовательский интерфейс браузера) используется для просмотра и навигации по отдельным веб-страницам. Вы можете посещать дополнительные веб-страницы, открывая другие окна или создавая новые вкладки в том же окне браузера.

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

    Адрес / строка поиска

    В верхней части окна веб-браузера вы увидите длинную текстовую строку. Это адресная строка (или строка поиска) , где вы можете ввести адрес (URL) веб-сайта, например avast.com. Вы также можете ввести здесь условия поиска, и ваш браузер будет выполнять поиск через поисковую систему по умолчанию.

    Попробуйте ввести поисковый запрос «Что такое веб-браузер?» И просмотрите список результатов, который появляется.

    Кнопки навигации

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

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

    Третья кнопка меняется в зависимости от того, загружается страница или уже загружена. Если страница загружается, вы увидите значок X: нажмите эту кнопку, чтобы прекратить загрузку текущей страницы (это полезно, если вы не хотите ждать, пока загрузятся все элементы или контент страницы).

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

    На правой стороне адресной строки находятся кнопки свертывания, развертывания или восстановления вниз и закрытия соответственно. Нажатие кнопки свертывания отправляет страницу в нижнюю часть экрана и скрывает ее.

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

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

    Другие функции веб-браузера

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

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

    История веб-браузеров

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

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

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

    Какой тогда был первый веб-браузер? Фактически, первый веб-браузер на самом деле назывался World Wide Web, и он был разработан Тимом Бернерсом-Ли в 1989 году. Хотя имя конкретного веб-браузера не просуществовало долго, его наследие живет сегодня, так как большинство веб-адресов начинаются с www , что означает World Wide Web. В начале 1990-х последовало несколько других веб-браузеров.

    Однако настоящим переломным моментом стала NCSA Mosaic, которая позволяла отображать мультимедийную графику , такую ​​как текст и изображения, вместе, , по нескольким протоколам.Эта функция помогла популяризировать использование Интернета среди не технически подкованных пользователей и помогла вывести веб-разработку на путь к удобному для пользователей повсеместному распространению, которым она пользуется сегодня.

    Хотя сам браузер Mosaic просуществовал недолго, его первоначальные создатели развили проект дальше, и поэтому Mosaic стал браузером Netscape Navigator и, наконец, Mozilla Firefox.

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

    Важны ли конфиденциальность и безопасность в веб-браузере?

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

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

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

    Попробуйте Avast Secure Browser и работайте уверенно

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

    Avast Secure Browser автоматически блокирует всю рекламу , чтобы сократить время загрузки страницы и предотвратить вредоносную рекламу. А благодаря усовершенствованным средствам защиты конфиденциальности и безопасности вы будете в безопасности, совершая покупки и банковские операции в Интернете .

    У вас также есть возможность заблокировать онлайн-отслеживание, а также вредоносные веб-сайты и загрузки. Плавная и быстрая загрузка в Avast Secure Browser означает, что просмотр веб-страниц не будет прерываться или задерживаться.Более того, бесплатно и легко скачать .

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

    Как работают веб-браузеры?

    «Если вы не разбираетесь в деталях своего бизнеса, вы проиграете» - Джефф Безос

    Сегодня трудно представить мир без Интернета.

    Веб-браузер лежит в основе нашего взаимодействия с Интернетом.Ежедневно миллионы людей посещают веб-сайты через браузеры. На пять основных браузеров - Chrome, Firefox, Internet Explorer, Safari и Opera - приходится 95% веб-трафика.

    Основная роль веб-браузера заключается в том, чтобы принимать веб-URL через адресную строку, извлекать ресурсы и отображать их на экране.

    Функциональность браузеров можно разделить на четыре основных раздела, включая:

    • Выборка
    • Процесс
    • Дисплей
    • Хранилище

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

    Выборка

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

    Сетевой уровень

    Принимает URL-адреса из пользовательского интерфейса браузера и отвечает за выполнение сетевых вызовов для выборки ресурсов по протоколам HTTP / FTP.

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

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

    Браузер сначала ищет доступность кеша в локальной памяти для запрошенных URL. В противном случае сетевой уровень создает HTTP-пакет с доменным именем для запроса веб-ресурса через Интернет.

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

    Процесс

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

    Механизм рендеринга

    Основной поток WebKit

    Подсистема механизма рендеринга обрабатывает данные с сетевого уровня и отображает веб-контент на экране.

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

    Доступно множество механизмов рендеринга, которые обычно написаны на C ++. Примеры:

    • Chrome и Opera используют Blink
    • Firefox использует Gecko
    • Internet Explorer использует Trident
    • Edge использует EdgeHTML
    • Safari использует WebKit

    С механизмами визуализации веб-ресурсы анализируются.Например, анализатор HTML преобразует шаблон HTML в объект, называемый деревом DOM.

    Таблицы стилей анализируются для создания правил стиля как для внешних, так и для встроенных элементов стиля.

    Дерево визуализации - это объект, который объединяет анализируемый HTML и CSS. Он создается с помощью визуальных инструкций и атрибутов для отображения элементов на экране пользователя.

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

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

    Процесс рисования включает в себя регистрацию макета с атрибутами стиля, такими как цвет, фон и другие свойства CSS.

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

    Механизм JavaScript

    Это подсистема для синтаксического анализа кода JavaScript в машинный код и последующего его выполнения.Эти JS-движки могут быть стандартными интерпретаторами или JIT-компиляторами (точно в срок).

    Одним из самых популярных движков является движок Google V8. Написан на C ++. Вот несколько примеров, которые используют разные браузеры:

    Механизм JavaScript

    Эти механизмы включают в себя два компонента: кучу памяти и стек вызовов.

    Куча памяти - это место, где память выделяется для переменных, функций и других элементов JS.

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

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

    Эти механизмы имеют несколько внутренних потоков для выполнения различных задач. Примеры таких задач:

    • Выборка, компиляция и выполнение кода
    • Поток профилирования для анализа функций и их затрат времени
    • Оптимизация процесса выполнения
    • Сборщики мусора

    Механизм Google V8 использует метку и очистку для пошаговой сборки мусора.Это позволяет использовать время простоя браузера и повышает производительность.

    Начиная с версии 5.9 (начало 2017 г.), Ignition и Turbofan являются последними конвейерами двигателя V8.

    NodeJS - это серверная среда выполнения JavaScript, построенная на основе движка Google с открытым исходным кодом V8. Он используется для выполнения JavaScript на стороне сервера.

    Дисплей

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

    Пользовательский интерфейс

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

    Наряду с этими кнопками ввода и действий у нас есть область просмотра (основная часть экрана) для отображения содержимого, полученного с веб-сайтов.

    Пользовательский интерфейс (UI) взаимодействует с другими подсистемами в браузере для отображения содержимого и соответствующих действий.

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

    Механизм браузера

    Механизм браузера - это встраиваемая подсистема, которая обеспечивает высокоуровневый интерфейс для механизма визуализации.

    Он загружает указанный URL-адрес и поддерживает примитивные действия при просмотре, такие как переход вперед, назад и перезагрузка.

    Он также предоставляет хуки для просмотра различных аспектов сеанса просмотра.Например, просмотр текущего прогресса загрузки страницы и предупреждений JavaScript.

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

    Хранилище

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

    Хранение данных

    Сохранение данных достигается с помощью различных API-интерфейсов браузера. Некоторые из них включают в себя:

    • Локальное хранилище
    • Сессионное хранилище
    • Файлы cookie
    • WebSQL
    • IndexedDB
    • Файловая система
    • AppCache
    • Сервисные рабочие

    Локальное хранилище и хранилище значений сеанса, которые могут хранить любые пары ключ-значение сеанса Объекты и функции JS в браузере.

    Сессионное хранилище сохраняет данные в браузере, пока сеанс веб-сайта активен. Локальное хранилище - это память браузера. Он сохраняет данные до тех пор, пока они не будут очищены или изменены явно пользователем или кодом JavaScript.

    Эти ограничения сеанса и локального веб-хранилища составляют 5 МБ на объект и 50 МБ на систему.

    Файлы cookie - это наборы данных пары ключей, хранящиеся в памяти браузера. Они отправляются туда и обратно между клиентом и сервером.

    Это дорогие и наименее производительные методы сохранения данных.Однако они очень полезны, когда речь идет о конфиденциальности и безопасности.

    WebSQL, IndexedDB и FileSystem могут хранить данные в браузере в зависимости от размера, производительности и необходимости.

    App Cache был представлен в HTML5. Он хранит статический контент веб-сайта и обслуживает контент пользовательского интерфейса во время простоя сети.

    Service Workers - это новый способ Google кэшировать данные веб-сайтов для автономного использования. Он имеет важные функции по сравнению с App Cache. Вы можете узнать больше о сервис-воркерах здесь.

    Резюме и ссылки

    Хорошо, давайте сделаем краткий итог. Все основные веб-браузеры содержат подсистемы, а также другие подмодули, помогающие в этом процессе.

    Эти системы задействованы от приема веб-URL до отображения веб-контента на экране. Они выполняют сетевые вызовы, получают ресурсы, анализируют файлы HTML, CSS и JavaScript для создания объектов для отображения на экране. Все это вместе дает пользователю прекрасный веб-сайт.

    Вы можете узнать больше на ресурсах, ссылки на которые приведены ниже:

    Спасибо за чтение 👍

    Истории по теме

    Теги

    Присоединяйтесь к хакеру Полдень