Що відбувається, коли ви вводите URL-адресу в браузері та натискаєте Enter
Якщо ви маєте будь-яку технічну професію, я впевнений, що хтось колись ставив вам це питання. Незалежно від того, чи ви інженер, розробник, маркетолог або навіть продавець, завжди корисно мати базове розуміння того, що відбувається за нашими браузерами і як інформація передається на наші комп’ютери через Інтернет.
Уявімо ситуацію: Ви відкрили свій ноутбук, двічі клацнули на веб-браузер, ввели dou.ua в адресному рядку і натиснули клавішу «Enter». Для нас це просто кнопка введення, тож давайте подивимося, що за нею ховається.
Давайте спочатку поговоримо про веб-браузер.
Веб-браузер
Веб-браузер — це програма, яка використовується більшістю людей для доступу та перегляду веб-сайтів в Інтернеті. Сучасні веб-браузери, такі як Google Chrome і Mozilla Firefox, мають різні вбудовані функції, які спрощують процес підключення до веб-сторінок, роблячи його більш приємним для користувача. Ми розглянемо деякі з цих функцій у наступних розділах.
Коли ви вводите dou.ua в адресному рядку веб-браузера, ви, по суті, надаєте браузеру URL (Uniform Resource Locator) веб-сайту, який хочете відвідати. URL слугує адресою файлу або ресурсу, який потрібен браузеру для відображення веб-сторінки.
Повна URL-адреса зазвичай має таку структуру:
- http:// повідомляє браузеру, що ми хочемо отримати доступ до сторінки за допомогою Hyper Text Transfer Protocol (HTTP). Це протокол, який використовується браузерами для взаємодії з веб-сторінками. Інші протоколи мають інші цілі, наприклад, ftp:// (File Transfer Protocol) — це протокол, який використовується для передачі файлів через Інтернет. https:// — це ще один протокол, про який ми поговоримо пізніше, але якщо коротко, то це захищена версія http://.
- www — це субдомен dou.ua; ця частина вказує на певне місце (сервер) всередині домену, де розташовані ресурси.
- dou.ua — це доменне ім’я; воно представляє сервер, на якому знаходяться всі дані для dou.ua .
- /index.html — шлях до файлу, який буде відображено браузером.
Однією зі зручних функцій веб-браузерів є те, що вони не вимагають від вас вводити повну URL-адресу кожної веб-сторінки, яку ви хочете переглянути. Сьогодні вважається, що коли ви набираєте dou.ua, ви маєте на увазі www.dou.ua , але за цим стоїть певний зв’язок між браузером і сервером веб-сайту, який визначає, які файли потрібні для домашньої сторінки. Це може бути /index.html, /index.php або інший файл, який створюється динамічно.
Зв’язок між комп’ютерами в мережі будується на основі багатьох різних протоколів. Протокол — це набір правил, яких обидві сторони повинні дотримуватися, щоб функціонувати. Наприклад, обидві сторони повинні розмовляти однією мовою (синтаксисом), включати певну інформацію про себе і взагалі діяти так, як очікується згідно з протоколом.
Одним з найбільш важливих протоколів, що використовуються в Інтернеті, є TCP/IP.
TCP/IP
TCP/IP (Transmission Control Protocol/Internet Protocol) — це набір протоколів, необхідних для комунікації через Інтернет. Модель TCP/IP була розроблена Агентством з дослідження оборонних проектів (DARPA) США як частина їхнього дослідницького проекту в 1960 році. Спочатку вона була розроблена для використання тільки в оборонній сфері. Але згодом вона отримала широке розповсюдження. Основне призначення цієї моделі — з’єднати дві віддалені машини для обміну інформацією. Ці машини можуть працювати в різних мережах або мати різну архітектуру.
Ці рівні дуже схожі на рівні моделі OSI. Application рівень в моделі TCP/IP має приблизно таку ж функціональність, як і три верхні рівні (Application, Presentation, та Session) моделі OSI. Крім того, Internet рівень діє як Network рівень, а Network Access рівень діє як два нижніх рівня (Physical та Data-Link) моделі OSI. Мережева модель TCP/IP названа на честь двох основних протоколів (TCP і IP) і широко використовується в сучасній архітектурі Інтернету. В різних джерелаж вказана різна кількість рівнів TCP/IP. Це 4 або 5. Але давайте поговоримо використовуючи п’ятирівневу модель TCP/IP, як показано нижче.
На наведеній вище схемі Physical рівень і Data-Link рівень діють як Network Access рівень раніше використовуваної моделі TCP/IP. Тож, давайте дізнаємося про п’ятирівневу модель TCP/IP, розглянемо ключові особливості цієї моделі та функціональні можливості її п’яти рівнів.
Ключові особливості моделі TCP/IP полягають у наступному:
- Підтримує гнучку архітектуру: Ми можемо з’єднати два пристрої з абсолютно різною архітектурою, використовуючи модель TCP/IP.
- Перевірка кінцевих вузлів: Кінцеві вузли (джерело і пункт призначення) можуть бути перевірені, і з’єднання може бути здійснено для безпечної та успішної передачі даних.
- Динамічна маршрутизація: Модель TCP/IP полегшує динамічну маршрутизацію пакетів даних найкоротшим і найбезпечнішим шляхом. Завдяки динамічній маршрутизації шлях, яким пройде пакет даних, неможливо передбачити, що підвищує безпеку даних.
Існують також деякі недоліки використання моделі TCP/IP, до яких можна віднести наступне:
- Замінити протокол непросто.
- Ролі та функції кожного рівня не задокументовані та не визначені належним чином, як це описано в моделі OSI.
Нижче наведено п’ять рівнів моделі TCP/IP:
- Фізичний рівень
- Канальний рівень
- Інтернет-рівень
- Транспортний рівень
- Прикладний рівень
Зараз ми детально ознайомимося з функціоналом цих рівнів один за одним.
1. Фізичний рівень
Фізичний рівень — це найнижчий рівень моделі TCP/IP. Він має справу з даними у вигляді бітів. Цей рівень в основному відповідає за зв’язок між хостами в мережі. Він визначає середовище передачі та режим зв’язку між двома пристроями. Середовище може бути дротовим або бездротовим, а режим — simplex, half-duplex, або full-duplex.
Він також визначає конфігурацію лінії (точка-точка або багатопортова), швидкість передачі даних (кількість бітів, що передаються щосекунди) і топологію мережі. На цьому рівні не існує специфічних протоколів, які б використовувалися. Функціональність фізичного рівня варіюється від мережі до мережі.
2. Канальний рівень
Канальний рівень — це другий рівень протоколу TCP/IP. Він має справу з даними у вигляді кадрів даних. В основному він виконує кадрування даних, в якому він додає деяку інформацію заголовка до пакетів даних для успішної доставки пакетів даних до правильного місця призначення. Для цього він виконує фізичну адресацію пакетів даних, додаючи до них адресу джерела та адресу призначення.
Канальний рівень полегшує доставку кадрів в межах однієї мережі. Він також полегшує потік і контроль помилок кадрів даних. Потік даних можна контролювати за допомогою швидкості передачі даних. Крім того, помилки в передачі даних і помилкові кадри можуть бути виявлені і повторно передані за допомогою бітів контрольної суми в інформації заголовка.
3. Інтернет-рівень
Інтернет-рівень моделі TCP/IP приблизно такий самий, як і мережевий рівень моделі OSI. Він має справу з даними у вигляді дейтаграм або пакетів даних. Цей рівень в основному виконує логічну адресацію пакетів даних, додаючи до них IP-адресу (Internet Protocol). IP-адресація може здійснюватися за допомогою Internet Protocol версії 4 (IPv4) або Internet Protocol версії 6 (IPv6).
Інтернет-рівень також виконує маршрутизацію пакетів даних, використовуючи IP-адреси. Пакети даних можуть бути відправлені з однієї мережі в іншу за допомогою маршрутизаторів цього рівня. Цей рівень також виконує впорядкування пакетів даних на стороні одержувача. Іншими словами, він визначає різні протоколи для логічної передачі даних в межах однієї або різних мереж. Протоколи, які використовуються на Internet рівні: IP (Internet Protocol), ICMP (Internet Control Message Protocol), IGMP (Internet Group Management Protocol), ARP (Address Resolution Protocol), RARP (Reverse Address Resolution Protocol) та інші.
4. Транспортний рівень
Транспортний рівень — це четвертий рівень моделі TCP/IP. Він має справу з даними у вигляді сегментів даних. В основному він виконує сегментацію даних, отриманих від верхніх рівнів. Він відповідає за транспортування даних і встановлення зв’язку між прикладним рівнем і нижніми рівнями. Цей рівень забезпечує наскрізний зв’язок і безпомилкову доставку даних. Він також полегшує керування потоком, визначаючи швидкість передачі даних. Транспортний рівень використовується для зв’язку між процесами за допомогою номера порту джерела та призначення.
Транспортний рівень полегшує контроль перевантажень за допомогою наступних протоколів:
- TCP (Transmission Control Protocol). Це протокол, орієнтований на з’єднання. Він виконує впорядкування та сегментацію даних. Він також виконує контроль потоку і помилок при передачі даних. У TCP є функція підтвердження отриманих даних. Це повільний, але надійний протокол. Він підходить для важливих даних, які не передаються в реальному часі.
- UDP (User Datagram Protocol). Це протокол без з’єднання. Він не виконує контроль потоку і помилок при передачі даних. В UDP немає функції підтвердження отриманих даних. Це швидкий, але ненадійний протокол. Він підходить для передачі даних у реальному часі.
5. Прикладний рівень
Прикладний рівень в моделі TCP/IP еквівалентний трьом верхнім рівням (Application, Presentation та Session) моделі OSI. Він відповідає за передачу всього повідомлення даних. Прикладний рівень забезпечує інтерфейс між мережевими службами і прикладними програмами. Він в основному надає послуги кінцевим користувачам для роботи через мережу. Наприклад, передача файлів, перегляд веб-сторінок тощо. Цей рівень використовує всі протоколи вищого рівня, такі як HTTP, HTTPS, FTP, NFS, DHCP, FMTP, SNMP, SMTP, Telnet тощо.
Прикладний рівень допомагає налаштовувати та керувати мережевими з’єднаннями. Він також перевіряє автентифікацію програми користувача та авторизацію даних. Він також виконує деякі складні операції, такі як переклад даних, шифрування та дешифрування, стиснення даних. Прикладний рівень синхронізує дані на стороні відправника та одержувача. Іншими словами, це самий верхній рівень, який визначає інтерфейс для прикладних програм з сервісами транспортного рівня.
Це все про модель TCP/IP, а тепер перейдемо до DNS
DNS
Domain Name System (DNS) — це телефонна книга Інтернету. Люди отримують доступ до інформації в Інтернеті через доменні імена, наприклад, dou.ua. Веб-браузери взаємодіють через Інтернет-протокол (IP-адреси). DNS переводить доменні імена в IP-адреси, щоб браузери могли завантажувати інтернет-ресурси.
Кожен пристрій, підключений до Інтернету, має унікальну IP-адресу, за якою інші комп’ютери знаходять цей пристрій. Сервери DNS позбавляють людину необхідності запам’ятовувати такі IP-адреси, як 172.67.21.118 (в IPv4), або складніші новіші алфавітно-цифрові IP-адреси, такі як 2606:4700:10::6816:34ed (в IPv6).
Domain name records (Записи доменних імен)
Незважаючи на децентралізацію, інформацію про доменні імена все одно потрібно записувати та зберігати. Записи про доменні імена зберігаються на авторитетних DNS-серверах, які зазвичай розміщуються у реєстратора домену. Окрім зберігання записів, авторитетний DNS-сервер має право створювати, редагувати та видаляти записи для делегованих йому доменів. Завдяки цьому більшість реєстраторів пропонують своїм користувачам можливість керувати записами доменних імен без глибоких знань про внутрішню роботу DNS-серверів.
Однак важливо розуміти основи роботи з DNS-записами. Кожен домен може мати багато різних типів записів, які служать різним цілям. По суті, записи DNS створюють набір інструкцій, які дозволяють користувачам Інтернету знайти потрібний їм веб-сайт.
Нижче наведено короткий список найпоширеніших типів записів DNS:
- Запис містить IPv4-адресу домену і є найважливішим з цих записів. Один домен або піддомен може мати одну IP-адресу, тоді як на одну IP-адресу може вказувати кілька доменів.
- Запис AAAA — це, по суті, те ж саме, що і запис A, але для IPv6-адрес.
- Запис PTR знаходить доменне ім’я за допомогою зворотного пошуку, коли IP-адреса вже відома. Зазвичай IP-адреси мають по одному запису PTR, але на один і той самий домен може вказувати кілька записів PTR.
- Запис CNAME, або канонічне ім’я, перенаправляє домен або субдомен на інший домен без надання IP-адреси. Вони можуть використовуватися як псевдоніми доменів.
- Запис MX — це запис поштового обміну, який спрямовує пошту на поштовий сервер. Він вказує, як електронна пошта повинна бути направлена до місця призначення.
- TXT-запис дозволяє адміністратору домену зберігати в ньому текстові нотатки. Вони зазвичай використовуються для оцінки надійності та підтвердження права власності на домен.
- Запис NS вказує на авторитетні сервери імен. Домен часто має кілька серверів імен, первинних і вторинних, щоб запобігти відключенням у разі збоїв.
Ви можете перевірити будь-які наявні записи за допомогою інструментів пошуку доменних імен, таких як nslookup або dig.
Domain Name Resolution Steps (Крок вирішення доменного імені)
Давайте повернемося до того моменту, коли ви ввели адресу dou.ua у своєму браузері і натиснули клавішу «Enter». В контексті DNS, перше, що станеться, це те, що браузер перевірить свій кеш, щоб побачити, чи він вже знає IP-адресу dou.ua . Кеш — це банк пам’яті, до якого браузеру легко отримати доступ. Іншими словами, якщо ви відвідували dou.ua нещодавно, браузер збереже IP-адресу призначення в своєму кеші, і процес дозволу закінчиться.
Якщо ви використовуєте Google Chrome, ви можете переглянути свій DNS-кеш, ввівши
Ви, ймовірно, побачите деякі знайомі URL-адреси та відповідні їм IP-адреси, перелічені поруч.
Уявімо, що «dou.ua» відсутній в кеші DNS вашого браузера.
Далі браузер перевірить, чи існує в операційній системі інформація про IP-адресу «dou.ua». На системах Linux і MacOS існує файл під назвою /etc/hosts (C:\Windows\System32\Drivers\etc\hosts у Windows), в якому зберігається локальна інформація DNS. Ці файли використовувалися частіше, коли не було розподілених DNS-серверів, як сьогодні, але вони все ще перевіряються браузером перед виходом в мережу.
Припустимо, що IP-адреса dou.ua не була знайдена у файлі hosts.
Далі браузер зробить запит до віддаленого DNS-сервера. DNS-сервер — це сервер, призначений для перетворення доменних імен в IP-адреси. Вони містять базу даних доменних імен і відповідних їм IP-адрес, а також адреси інших DNS-серверів.
Більшість інтернет-провайдерів мають сервери, призначені для вирішення доменних імен, тому програма почне з цього сервера, оскільки він, ймовірно, найближчий. Він запитає цей сервер: «Чи знаєте ви IP-адресу dou.ua»
Якщо DNS-сервер має необхідну інформацію, процес вирішення завершується. Однак, якщо він не має потрібної інформації, він переходить до запиту до наступного DNS-сервера, який називається кореневим DNS-сервером. Кореневі DNS-сервери мають інформацію про сервери доменів верхнього рівня (TLD). Прикладами таких доменів є .ua, .com, .org, .edu, .co.uk, .cn та багато інших.
Ми запитуємо кореневий DNS-сервер: «Чи знає він IP-адресу dou.ua ?» Він відповідає: «Ні, але я знаю про сервер верхнього рівня .com. Я перенаправлю ваш запит на нього».
Оскільки dou.ua закінчується на .com, кореневий DNS-сервер, до якого підключений браузер, надішле запит на сервер домену верхнього рівня .ua.
Сервер TLD .ua зберігає інформацію про сервер імен домену «другого рівня», в нашому випадку dou.
Запит переадресовується на сервер імен dou.ua . Той, хто зареєстрував домен dou.ua, ймовірно, знає сервер імен свого домену. Якщо сайт розміщено, наприклад, на хостингу GoDaddy, сервером імен може бути ns1.godaddy.com або ns2.godaddy.com.
Нарешті, це сервери, які (сподіваємося) будуть знати IP-адресу dou.ua. Якщо ні, то браузеру буде надіслано помилку, і ви побачите щось на кшталт цього:
Примітка: ERR_NAME_NOT_RESOLVED.
DNS Caching (Кешування DNS)
Процес вирішення доменного імені складається з багатьох етапів. Якби процес дозволу доводилося виконувати повністю щоразу, коли ви хочете переглянути веб-сторінку, ваша робота в Інтернеті була б повільнішою. Як згадувалося раніше, браузери мають механізм кешування, тому їм не потрібно ініціалізувати весь рекурсивний процес дозволу знову і знову. Лише час від часу для незнайомих веб-сайтів.
Кеш є не лише у браузерах, але й у DNS-серверах. Сервери відстежують запитувані домени, а потім зберігають їх у банку пам’яті протягом деякого часу, щоб скоротити процес рекурсивного дозволу.
Коли хтось реєструє доменне ім’я, у нього є можливість налаштувати записи DNS для цього домену. Один з параметрів конфігурації називається Time to Live (TTL).
TTL домену — це час у секундах, протягом якого DNS може існувати в кеші.
Скажімо, dou.ua з TTL 10 днів вирішив запустити нову версію свого сайту завтра. Було б розумно оновити свої DNS-записи і встановити TTL на 0, щоб користувачі, які мають dou.ua у своєму кеші, не побачили «старий» сайт у день запуску. Пізніше вони можуть скинути TTL до 10 днів, якщо захочуть. Довший TTL покращує користувацький досвід, тому що повторним відвідувачам не потрібно проходити через весь етап роздільної здатності кожного разу, коли вони заходять на сайт.
Короткий підсумок
Досі ми говорили про браузер, URL-адреси, протоколи TCP/IP, доменні імена та DNS. На даний момент ми дозволили dou.ua на IP-адресу 172.67.21.118 і все ще чекаємо, коли з’явиться веб-сторінка.
Давайте подивимося, що станеться, коли ми натиснемо enter:
Зверніть увагу на зміни, які з’являться в браузері...
- Повна URL-адреса змінилася з dou.ua на dou.ua.
- Поруч з URL-адресою є піктограма зеленого замка.
- У заголовку вікна браузера з’являється напис «Спільнота програмістів | DOU».
- Відображається веб-сторінка DOU.
Давайте обговоримо зміни 1 і 2: зелений замок і https.
HTTPS, SSL, and TLS
Пам’ятаєте HTTP, протокол передачі гіпертексту? Так от, HTTPS — це захищений протокол передачі гіпертексту. Цей протокол працює подібно до HTTP (клієнт надсилає запит на ресурс, сервер відповідає на запит), за винятком того, що зв’язок зашифрований, тому його не може прочитати ніхто, хто спостерігає за мережевим трафіком.
Думаючи про безпеку, важливо пам’ятати, що запити і відповіді зазвичай включають багато інших маршрутизаторів на шляху від клієнта до сервера. Природа базових IP-протоколів спрямовує шлях від клієнта до сервера, обираючи маршрут, який, на його думку, є найбільш ефективним. Цілком ймовірно, що десь на цьому маршруті є ділянка, на якій ви не хочете бачити свої повідомлення.
HTTPS є вимогою для будь-якого пристойного веб-сайту, який просить користувачів ввести свою особисту інформацію, таку як номер кредитної картки, адресу, номер телефону тощо. Без HTTPS цю інформацію можуть побачити спостерігачі за мережевим трафіком.
Як це працює?
Протокол HTTPS включає в себе ще один протокол, який називається TLS (Transport Layer Security). TLS — це «нова і покращена» версія SSL (Secure Sockets Layer). Mozilla Developer Network стверджує, що SSL зараз вважається застарілим, але він все ще використовується в протоколі HTTPS. Суть в тому, що і SSL, і TLS — це протоколи, які використовуються в цілях безпеки.
Основні дві речі, які забезпечує протокол безпеки транспортного рівня — це автентифікація та шифрування.
Автентифікація: забезпечення того, що клієнт дійсно є тим, за кого себе видає, а сервер дійсно є тим, за кого себе видає. Аутентифікація потрібна, тому що деякі зловмисники обманюють клієнтів, видаючи себе за сервер, до якого вони намагаються дістатися.
Шифрування: використання криптографічних алгоритмів для перемішування повідомлень під час передачі між клієнтом і сервером, щоб їх не міг зрозуміти ніхто, крім двох сторін.
SSL і TLS використовують асиметричний алгоритм шифрування, який встановлює два різні ключі для кожної сторони: один для шифрування, інший для розшифрування. Ви шифруєте повідомлення одним ключем, а потім розшифровуєте його іншим. Ці ключі, відомі як публічні та приватні ключі, математично пов’язані між собою, тому повідомлення, надіслані на публічний ключ А, можуть бути розшифровані лише за допомогою приватного ключа А.
TLS-рукостискання
Рукостискання ТLS — це протокол між клієнтом (веб-браузером) і сервером (dou.ua) для встановлення довіри, а потім узгодження ключа, який слід використовувати для шифрування і дешифрування трафіку між ними. Ось що відбувається під час рукостискання TLS:
- Клієнт надсилає повідомлення Client Hello. Цей пакет містить версію TLS, довжину пакета, шифри (типи шифрування), з якими може працювати клієнт, і випадковий рядок байт, який використовується для створення головного ключа.
- Сервер відповідає повідомленням Server Hello. Цей пакет містить шифр, який сервер вибрав для використання, випадковий рядок байт, який використовується для створення головного ключа, та інформацію про сертифікат довіри сервера.
- Сервер надсилає Certificate клієнту. Сюди входить інформація про страховика (наприклад, VeriSign), назва компанії, умови використання, термін дії та відкритий ключ сервера.
- Сервер надсилає клієнту Certificate Status. Показує, чи був сертифікат успішно перевірений. Сервер також надсилає повідомлення Hello Done, що означає кінець знайомства між ними.
- Клієнт генерує головний (або «секретний») ключ, використовуючи випадковий рядок байтів, кодуючи його за допомогою відкритого ключа сервера.
- Клієнт надсилає свій відкритий ключ разом з головним ключем на сервер. Це частина асиметричного обміну ключами шифрування.
- Сервер отримує цей ключ і генерує симетричний ключ, який буде використовуватися під час сеансу. Симетричні ключі набагато швидші та ефективніші за асиметричні. Вони менш безпечні, але до цього моменту клієнт і сервер вже з’єднані асиметричними ключами, тому безпечне з’єднання вже встановлено. Симетричний ключ також генерується на стороні клієнта.
- Клієнт надсилає серверу специфікацію зміни шифру(change cipher spec), щоб повідомити про перехід від асиметричного до симетричного шифрування, разом з повідомленням про завершення роботи клієнта.
- Сервер надсилає специфікацію нового шифру та повідомлення про завершення роботи сервера (Server Finished) (тепер він зашифрований симетричним ключем)
- Сервер надсилає клієнту новий квиток сеансу, і передачі не будуть зашифровані через мережу.
Ось узагальнена версія того, як це працює в контексті відвідування сайту dou.ua:
- Ваш браузер має публічний ключ.
- Ви робите запит до dou.ua.
- Коли запит потрапляє на сервер DOU, на ньому з’являється повідомлення: «Це безпечний веб-сайт. Перш ніж я надішлю вам будь-які ресурси, мені потрібно встановити автентифікацію та шифрування».
- Відбувається рукостискання TLS
- Безпечний сеанс встановлено. В адресному рядку з’являється зелений замок, а на початку URL-адреси — https.
HTTP
Hyper Text Transfer Protocol — це протокол прикладного рівня, який використовується для передачі графіки, аудіо, відео, тексту і посилань; разом вони відомі як «гіпермедіа». Веб-сторінки можуть бути створені для відображення гіпермедіа за допомогою Hypertext Markup Language (HTML).
Цей протокол побудований на парадигмі запит/відповідь. Коли ви вводите адресу dou.ua у своєму браузері і натискаєте enter, ви робите HTTP-запит до сервера. У свою чергу, сервер надсилає вам HTTP-відповідь.
HTTP-запити і відповіді складаються з двох частин: header і body. У заголовку міститься інформація про запит, відформатована у вигляді пар ключ-значення. Тіло містить сегмент або весь запитуваний ресурс.
Ось як може виглядати заголовок HTTP-запиту:
І заголовок HTTP-відповіді, надісланий назад з сервера:
Сегмент тіла HTTP-запиту часто містить ресурс, який відображає браузер. Якщо це веб-сторінка, то вона обов’язково містить HTML-код.
HTML
Ось як виглядає деякий HTML-код:
HTML використовує теги і звичайний текст для створення структури веб-сторінки і визначення її зовнішнього вигляду. Окрім HTML, веб-сторінки також використовують Cascading Style Sheets (CSS) та JavaScript, щоб додати більше стилю та функціональності веб-сторінці.
Ім’я файлу на зображенні вище називається index.html. index.html — це спеціальне ім’я, яке виявляється html-сторінкою за замовчуванням, яка відображається при переході на веб-сайт, якщо не вказано жодного іншого. Іншими словами, коли ви відвідуєте dou.ua, є велика ймовірність, що URL сторінки, яка відображається, буде www.dou.ua/index.html.
Для цілей статті, dou.ua є поганим прикладом, тому що їхня домашня сторінка не index.html. Вони, мабуть, налаштували свої сервери так, щоб їхня домашня сторінка відображала ресурс з іншою назвою.
Щоб переглянути HTML, CSS та JavaScript, які використовуються для відображення сайту dou.ua, ви можете натиснути правою кнопкою миші в браузері та вибрати «переглянути джерело сторінки».
Зображення вище — це лише невелика частина всього вихідного коду, який налічує близько 1600 рядків.
Браузер читає HTML, CSS і JavaScript, надсилає HTTP-запити на додаткові ресурси, такі як зображення, відео або скрипти, а потім відображає веб-сторінку:
А як щодо персоналізованого, динамічного контенту? Наприклад, коли я заходжу на ваш акаунт на amazon.com, він відображає моє ім’я і навіть пам’ятає, що я поклав у кошик для покупок.
Коли ви входите в Netflix, він запам’ятовує ваші улюблені серіали і те, на якій хвилині і секунді епізоду «Stranger Things» ви дивилися.
Це те, що ми називаємо динамічним контентом. Це контент, який підлаштовується під клієнта.
За допомогою JavaScript можна надавати динамічний контент, але надійні додатки, такі як Amazon і Netflix, використовують інші компоненти для обробки запитів і динамічного надання контенту: сервери додатків і сервери баз даних.
Application Servers (Сервери додатків)
Сервери додатків — це сервери, призначені для генерації статичного контенту для веб-сервера. Іншими словами, вони приймають деякі параметри, такі як "name="John", day="Monday", item="Laptop", обробляють параметри за допомогою програми, а потім повертають статичний документ на веб-сервер, який, у свою чергу, надсилає його клієнту.
У цьому прикладі код програми може виглядати приблизно так:
function sayHello(name, day, item) { return «Hello <name>, it is <day>, would you like to buy a <item>? }
Залежно від клієнта, цей пункт може генерувати статичний контент на кшталт «Hello John, it is Monday, would you like to buy a laptop?»
Це трохи дурний приклад, але ідея полягає в тому, що веб-сервер (який обслуговує статичний контент) з’єднаний з сервером додатків (який динамічно генерує статичний контент).
Додаток з мільйонами користувачів, такий як Netflix, потребує місця для зберігання всієї інформації про своїх клієнтів, щоб надавати їм персоналізований досвід. Йому потрібно знати їхнє ім’я, стан облікового запису, адресу для виставлення рахунків, історію переглядів та багато іншого. Де вони зберігають всю цю інформацію?
У базі даних.
Database Servers (Сервери баз даних)
Сервери баз даних — це сервери, призначені для зберігання та організації даних. Коли користувач реєструється на Netflix, на один із серверів бази даних надсилається запит, чи є «[email protected]» справжнім користувачем, і якщо так, то він звіряє введений ним пароль з паролем у базі даних, а потім діє відповідно, надаючи йому доступ або відмовляючи в доступі до його акаунта.
Уявіть собі всі поля в базі даних Netflix. Мільйони користувачів, кожен користувач має десятки чи сотні полів. Це має займати багато місця. Звичайно, вони не можуть вмістити все це на одному комп’ютері. А якщо він вийде з ладу? Чи всі втратять доступ до Netflix?
Це піднімає деякі інші поняття про веб-інфраструктуру: надмірність, доступність і безпека.
Redundancy (Надмірність)
Давайте спочатку розглянемо питання: «Що, якщо сервер бази даних Netflix вийде з ладу... Чи всі втратять доступ до сайту?»
Хороша веб-архітектура не має єдиної точки відмови. Це означає, що не існує чогось одного, що призведе до того, що все зламається. У Netflix є резервні сервери бази даних, які діють як резервні на випадок, якщо поточний сервер вийде з ладу. У них також є резервні веб-сервери, сервери додатків і резервування практично на всіх рівнях архітектури.
Availability (Доступність)
Ви можете собі уявити, що трафік відвідувачів, які заходять на Netflix, змінюється протягом дня. Люди не так часто дивляться Netflix на роботі, як вдома або на вихідних. Додаток, подібний до Netflix, який працює однаково незалежно від того, де ви знаходитесь і в який час ним користуєтесь, називається високодоступним. Висока доступність — це те, до чого прагне кожен веб-додаток. Вони роблять це різними способами, один з яких — використання сервера, відомого як балансувальник навантаження.
Балансувальник навантаження має гарну назву. Він врівноважує навантаження трафіку між серверами. Якщо додаток має балансувальник навантаження, це означає, що за ним стоїть кілька веб-серверів. Наявність декількох веб-серверів може бути ознакою надмірності (добре), або це можуть бути веб-сервери, призначені для обслуговування різного контенту. У будь-якому випадку, робота балансувальника навантаження полягає в тому, щоб приймати всі вхідні запити і відправляти їх на сервер.
Ось проста схема балансувальника навантаження haproxy перед двома веб-серверами:
Отже, коли ми робимо запит на dou.ua, перший сервер, на який потрапляє запит, швидше за все, є балансувальником навантаження. Звідти він вирішує, на який сервер перенаправити запит.
Балансувальники навантаження визначають сервер, на який надсилати запит, використовуючи такі алгоритми, як:
- Round Robin: якщо у вас є 3 сервери (A, B і C), перший запит надходить до A, другий — до B, третій — до C, четвертий — до A і т.д.
- Найменше з’єднань: вибрати сервер, який має найменшу кількість з’єднань
- Random: буквально випадковий.
- Найменша затримка: вибрати сервер, який працює найшвидше.
Існують також зважені версії цих алгоритмів, де адміністратор сервера може налаштувати для кожного сервера певну вагу, щоб він з більшою чи меншою ймовірністю був обраний для обробки запиту.
Використання балансувальника навантаження допомагає підтримувати працездатність програми, не перекладаючи все навантаження трафіку на один сервер.
Добре розроблені додатки також матимуть резервні балансувальники навантаження на випадок, якщо основний вийде з ладу. В іншому випадку це буде єдиною точкою відмови.
Security
Ми говорили про HTTPS/SSL/TLS, які чудово підходять для шифрування трафіку і забезпечення автентифікації між клієнтом і сервером, але хороша веб-архітектура йде далі і встановлює брандмауери (firewalls).
Брандмауер може бути фізичним пристроєм або програмним забезпеченням, встановленим на сервері, яке контролює вхідний і вихідний трафік. Адміністратори серверів можуть налаштувати брандмауер так, щоб він приймав вхідний трафік лише з певних IP-адрес або певних портів, наприклад.
До речі, порт — це як двері на інтерфейсі комп’ютера в мережі. Ми вже знаємо, що кожен комп’ютер у мережі має IP-адресу. Вони також мають можливість використовувати порти. За аналогією, ви можете уявити собі IP-адресу як номер телефону, а порт — як внутрішній номер. Деякі порти призначені для певних протоколів:
- Порт 80: HTTP
- Порт 443: HTTPS
- Порт 53: DNS
Припустимо, ви не хочете, щоб хтось запитував DNS-інформацію про ваш веб-сервер. Ви можете налаштувати брандмауер на цьому сервері так, щоб він забороняв будь-який вхідний трафік, що надходить з порту 53.
Брандмауери додають додатковий захист, визначаючи, який трафік ви хочете бачити на вході та виході з вашого сервера. Небажані зловмисники можуть зробити запит до вашого сервера і проникнути у файлову систему через порт 123. Якщо ваш сервер призначений для обслуговування веб-контенту, було б добре дозволити трафік лише на портах 80 і 443. Таким чином, будь-які вхідні запити на інші порти будуть відхилені.
Хороша веб-архітектура передбачає налаштування брандмауерів перед кожним сервером, щоб було зрозуміло, в який час трафік повинен входити і виходити.
Це все через те, що ви натискаєте enter. Сподіваюся, ви дізналися щось нове сьогодні.
Поділіться цією статтею з друзями, щоб поширити знання.
Продовжуйте вчитися :)
4 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів