Частина 2. Вступ до веб-серверів
Вступ¶
Протокол HTTP¶
HTTP (HyperText Ttransfer Protocol) є найпоширенішим протоколом в Інтернеті з 1990 року.
Цей протокол забезпечує передачу файлів (головним чином у форматі HTML, а також у CSS, JS, AVI тощо), локалізованих рядком символів під назвою URL, між браузером (клієнтом) і веб-сервером (званим httpd
на машинах UNIX).
HTTP — це протокол «запит-відповідь», що працює поверх TCP (Ttransmission Control Protocol).
- Клієнт відкриває TCP-з'єднання з сервером і надсилає запит.
- Сервер аналізує запит і відповідає відповідно до його конфігурації.
Протокол HTTP є "STATELESS": він не зберігає жодної інформації про стан клієнта від одного запиту до іншого. Динамічні мови, такі як Php, Python або Java, зберігають інформацію про сеанс клієнта в пам’яті (як на сайті електронної комерції).
Поточні протоколи HTTP – це версія 1.1, яка широко використовується, і версії 2 і 3, які набувають поширення.
Відповідь HTTP – це набір рядків, які сервер надсилає браузеру. Це включає:
- Рядок стану: вказує версію протоколу та статус обробки запиту за допомогою коду та пояснювального тексту. Рядок складається з трьох елементів, розділених пробілом:
- Використана версія протоколу
- Код стану
Значення коду
Поля заголовка відповіді: це необов’язкові рядки, які надають додаткову інформацію про відповідь та/або сервер. Кожен рядок складається з назви, яка визначає тип заголовка, за якою йде двокрапка (:) і значення заголовка.
Тіло відповіді: містить запитуваний документ.
Ось приклад відповіді HTTP:
$ curl --head --location https://docs.rockylinux.org
HTTP/2 200
accept-ranges: bytes
access-control-allow-origin: *
age: 109725
cache-control: public, max-age=0, must-revalidate
content-disposition: inline
content-type: text/html; charset=utf-8
date: Fri, 21 Jun 2024 12:05:24 GMT
etag: "cba6b533f892339d3818dc59c3a5a69a"
server: Vercel
strict-transport-security: max-age=63072000
x-vercel-cache: HIT
x-vercel-id: cdg1::pdqbh-1718971524213-4892bf82d7b2
content-length: 154696
Примітка
Вивчення того, як використовувати команду `curl`, буде дуже корисним для вирішення проблем ваших серверів у майбутньому.
Роль веб-сервера полягає в перекладі URL-адреси на локальний ресурс. Перехід до сторінки https://docs.rockylinux.org/ схожий на надсилання HTTP-запиту на цю машину. Важливу роль відіграє служба DNS.
URL¶
URL (Uuniform Rresource Llocator) — це рядок символів ASCII, який використовується для позначення ресурсів в Інтернеті. Його неофіційно називають веб-адресою.
URL-адреса складається з трьох частин:
<protocol>://<host>:<port>/<path>
Назва протоколу: це мова, яка використовується для спілкування через мережу, як-от HTTP, HTTPS, FTP тощо. Найпоширенішими протоколами є HTTP (протокол передачі гіпертексту) і його безпечна версія HTTPS, яка використовується для обміну веб-сторінками у форматі HTML.
Логін і пароль: дозволяє вказати параметри доступу до захищеного сервера. Цей параметр не рекомендується, оскільки пароль відображається в URL-адресі (з міркувань безпеки).
Хост: це ім’я комп’ютера, на якому розміщено запитуваний ресурс. Зауважте, що можливе використання IP-адреси сервера, що робить URL-адресу менш читабельною.
Номер порту: це пов’язано зі службою, яка дозволяє серверу знати запитуваний тип ресурсу. Порт протоколу HTTP за замовчуванням — порт 80 і 443 із HTTPS. Отже, номер порту необов’язковий, якщо протокол HTTP або HTTPS.
Шлях ресурсу: ця частина дозволяє серверу знати розташування ресурсу. Як правило, це розташування (каталог) і ім’я запитуваного файлу. Якщо в адресі нічого не вказано місце розташування, це вказує на першу сторінку хоста. В іншому випадку він вказує шлях до сторінки для відображення.
Порти¶
Запит HTTP надійде на порт 80 (порт за замовчуванням для HTTP) сервера, що працює на хості. Однак адміністратор може вільно вибрати порт прослуховування сервера.
Протокол HTTP доступний у безпечній версії: протокол HTTP (порт 443). Реалізуйте цей зашифрований протокол за допомогою модуля mod_ssl
.
Також можливе використання інших портів, таких як порт 8080
(сервери додатків Java EE).
Apache та Nginx¶
Двома найпоширенішими веб-серверами для Linux є Apache і Nginx. Ми обговоримо це в наступних розділах.
Author: Antoine Le Morvan
Contributors: Steven Spencer, Ganna Zhyrnova