В этой статье мы рассказываем о том, как работает веб-сервер, какие данные отправляются и принимаются между вашим браузером и веб-сервером.
Веб-сервер – это компьютер, который отвечает за хранение файлов веб-сайта и обмен ими с другими компьютерами. Он обычно используется для приема от клиентов запросов на веб-документы и возвращения ответов на них с определенной информацией.
Сайт становится доступен на веб-сервере после того, как зарегистрировано его доменное имя и службой DNS (Domain Name System) выполнено преобразование адресов — то есть связывание IP-адреса, обозначенного набором цифр (например, 192.168.5.12), и доменного имени (www.site.com).
С одним IP-адресом может быть связано несколько доменных имен. В этом случае переадресация запроса к нужному сайту происходит за счет программного обеспечения сервера, которое определяет, из какой папки запускать программу или загружать файл.
На веб-сервере хранятся файлы сайта, а именно все HTML-документы и связанные с ними ресурсы, включая изображения, стили CSS, файлы JavaScript, шрифты и видео.
Ресурсы представляют собой не только реальные файлы на сервере (HTML, js, png и т. д.). Часть содержимого генерируется в момент поступления запроса специальным программным кодом с помощью шаблонов и баз данных - например: список новостей, сводка погоды, результаты поиска по сайту, корзина покупок и прочее. Соответственно различают статические (неизменяемые) ресурсы и динамические (изменяемые и адаптированные под конкретного пользователя). Получив запрос на динамическое содержимое, веб-приложение извлекает данные из БД и заполняет ими указанный в запросе шаблон.
Клиент, которым обычно является веб-браузер, передает веб-серверу запросы на получение ресурсов, обозначенных URL-адресами. Ресурсы — это HTML-страницы, изображения, файлы, медиа-потоки или другие данные, которые необходимы клиенту. В ответ веб-сервер передаёт клиенту запрошенную информацию.
Более детально этот процесс можно описать следующим образом:
Схематично взаимодействие между браузером и веб-сервером можно представить так:
Рассмотрим это же взаимодействие на уровне HTTP-протокола.
Обмен данными между клиентом и веб-сервером происходит по протоколу HTTP.
HTTP (HyperText Transfer Protocol, то есть «протокол передачи гипертекста») — это протокол, предназначенный для передачи гипертекстовых документов (то есть документов, которые могут содержать ссылки, позволяющие организовать переход к другим документам). Правила HTTP лежат в основе передачи информации в сети Интернет.
Задача, которая традиционно решается с помощью протокола HTTP — обмен данными между пользовательским приложением, осуществляющим доступ к веб-ресурсам (обычно это веб-браузер) и веб-сервером.
Клиентское приложение формирует HTTP-запрос и отправляет его на сервер, после чего серверное программное обеспечение обрабатывает данный запрос, формирует HTTP-ответ и передаёт его обратно клиенту, как правило, вместе с HTML-страницей или другими запрошенными данными.
Каждое HTTP-сообщение состоит из трех частей:
Все заголовки HTTP разделяются на четыре основных группы:
Больше узнать о заголовках можно в спецификации протокола HTTP.
Стартовая строка и заголовок являются обязательными элементами, а тело сообщения может отсутствовать.
Если клиент хочет загрузить, например страницу «About», HTTP-запрос может включать следующие элементы:
GET /about.html HTTP/1.1 Host: www.site.com Referer: https://www.google.com/ User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) Accept-Language: en-us
Где:
GET /about.html HTTP/1.1 |
Стартовая строка, в которой содержатся: GET - метод запроса, указывающий на основную операцию, которую необходимо осуществить над ресурсом; / about.html — запрашиваемый документ; HTTP – протокол передачи данных; /1.1 – версия протокола 1.1. |
Host: www.site.com |
Заголовок Host содержит имя сайта, с которого нужно загрузить документ. |
Referer: https://www.google.com/ |
В заголовке Referer прописан URL страницы, откуда сделан запрос. |
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) |
Заголовок User-Agent включает: Mozilla/5.0 – название и версию браузера, отправившего запрос; Windows NT 6.3; Win64; x64 – название и версию операционной системы. |
Accept-Language: en-us |
Заголовок Accept-Language указывает язык, используемый в браузере. |
Пример HTTP-ответа:
HTTP/1.1 200 OK Server: nginx/1.4.6 (Ubuntu) Date: Mon, 25 Jan 2021 16:54:33 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 98 Last-Modified: Mon, 25 Jan 2021 16:22:21 GMT
<html> <head> <title>An Example Page</title> </head> <body> <p>Hello World</p> </body> </html>
Где:
HTTP/1.1 200 OK
|
Стартовая строка, в которой прописаны: HTTP – протокол передачи данных; /1.1 – версия протокола 1.1; 200 – код ответа сервера (страница доступна); ОК - пояснение к коду ответа.
|
Server: nginx/1.4.6 (Ubuntu) |
Заголовок Server указывает название и версию сервера, который ответил - nginx/1.4.6 (Ubuntu). |
Date: Mon, 25 Jan 2021 16:54:33 GMT
|
Заголовок Date используется для указания даты и времени ответа. |
Content-Type: text/html; charset=UTF-8
|
В заголовке Content-Type прописаны тип отправленного контента (text/html) и его кодировка (charset=UTF-8). |
Content-Length: 98
|
Заголовок Content-Length указывает размер контента (в байтах) – 98. |
Last-Modified: Mon, 25 Jan 2021 16:22:21 GMT |
Заголовок Last-Modified содержит дату и время последнего изменения документа. |
<html> <head> <title>An Example Page</title> </head> <body> <p>Hello World</p> </body> </html>
|
Тело ответа, в котором содержится HTML-код запрошенной страницы. |
Трехзначный код, возвращаемый сервером в стартовой строке ответа, называется кодом состояния HTTP. Он определяет результат совершения запроса. Коды состояния HTTP разработаны в соответствии со стандартами, определенными Инженерным советом Интернета (IETF).
Первая цифра кода указывает на класс состояния. В настоящее время выделено пять классов состояния:
Вторая и третья цифры в коде детализируют статус ответа. Например:
Набор кодов состояния описан в соответствующих документах RFC («Request for Comments»), содержащих технические спецификации и стандарты, установленные IETF.
Вы можете проверить код статуса ответа страниц вашего сайта на сервисе Labrika в таблице «Свойства страниц сайта», расположенной в разделе «Инструменты».
Куки или cookie (от англ. «печенье») — это небольшой текстовый файл с набором служебных данных о посещении сайтов, который веб-сервер отправляет для сохранения в браузере пользователя.
Браузер всякий раз при попытке открыть страницу сайта пересылает cookie обратно веб-серверу.
Примеры использования cookie:
От сервера браузеру cookie передаются в составе HTTP-ответа с помощью заголовка Set-Cookie:
HTTP/1.1 200 OK Content-type: text/html Set-Cookie: имя=значение
Браузер отправляет их серверу в HTTP-запросе в заголовке Cookie:
GET /spec.html HTTP/1.1 Host: www.example.org Cookie: имя=значение
Например, cookie могут содержать пароль, если пользователь авторизован на данном сайте:
GET /cart HTTP/1.1 Host: www.site.com Referer: https://www.google.com/ User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) Accept-Language: en-us Cookie: login=joe@example.com; password=a497f4d4h7b956
Параметры HTTP-заголовков Cookie и Set-Cookie определяются в спецификации RFC 6265.
Без cookie каждый просмотр веб-страницы является изолированным действием, не связанным с другими просмотрами страниц того же сайта. Сookie позволяют выявить связь между просмотрами веб-страниц одним и тем же пользователем.
Аутентификация пользователей (то есть проверка их подлинности) с помощью cookie происходит следующим образом:
При передаче по протоколу HTTP данные не защищаются и передаются в открытом виде.
Расширение HTTPS (аббр. от англ. HyperText Transfer Protocol Secure) создано для того, чтобы соединение было безопасным, а данные передавались в зашифрованном виде по криптографическому протоколу SSL (secure sockets layer) или TLS (transport layer security). Это специальная «обертка» поверх HTTP, которая шифрует данные, делая их недоступными для злоумышленников.
Чтобы сайт стал работать по протоколу безопасного соединения HТТPS, нужен SSL-сертификат, который содержит криптографические ключи, а также данные о веб-сайте и подтверждает его подлинность. Надежные сертификаты выдаются специальными удостоверяющими центрами. Подробнее о том, как получить SSL-сертификат, вы можете прочитать в отдельной статье на нашем сайте.
Синтаксически HTTPS идентичен протоколу HTTP, то есть использует те же стартовые строки и заголовки.
Использование протокола HTTPS является значимым фактором ранжирования сайтов в результатах поиска. Ещё в 2015 году специалист Google Гэри Иллис заявил, что повышение рейтинга компании по протоколу HTTPS может стать решающим фактором, когда в остальном сигналы качества для двух результатов поиска равны. Если поисковый робот обнаружит две одинаковые страницы - одну с HTTP, а вторую с HTTPS, он добавит в индекс страницу с безопасным протоколом.
Сайт, который не использует HTTPS-протокол, со временем может потерять свои позиции в поиске. Отсутствие HTTPS говорит пользователям и поисковым системам, что безопасность их данных находится под угрозой, а значит, отображать такой сайт на первых страницах выдачи и переходить на него не стоит.
Кроме того, в строке браузера, например, Google Chrome, рядом с адресом сайта без HTTPS ставится отметка «Не защищено».
Тогда как сайты, использующие безопасный протокол HTTPS, помечаются значком в виде замка.
Посмотреть данные о наличии на вашем сайте протокола HTTPS и SSL-сертификата, позволяющего использовать зашифрованное соединение, вы можете на сервисе Labrika в отчете «Безопасность» раздела «Технический аудит».
Протокол HTTPS обязательно должен быть на тех сайтах, которые запрашивают конфиденциальные данные пользователей: логины и пароли от аккаунтов, номера банковских карт, адреса электронной почты и т. п. В первую очередь это касается коммерческих ресурсов, социальных сетей, почтовых сервисов, сайтов с регистрацией пользователей.
Читать дальше подобные статьи