Сучасний інтернет будується на спілкуванні між клієнтом (браузером) і сервером. Щоб вони могли обмінюватись інформацією між собою, були розроблені спеціальні протоколи. Одним з таких є HTTP, і завдяки йому користувачі можуть працювати через браузер і переглядати HTML-сторінки.
Що таке HTTP-заголовки
HTTP – це спосіб обміну HTML-сторінками між двома комп'ютерами. Протокол був винайдений в 1990 році і в даний час є основним методом відображення сторінок з гипертексом.
HTTP-заголовки – це рядки, якими спілкуються комп'ютери. Це нагадує діалог між людьми. Браузер при відкритті сайту генерує запит, в ньому вказується необхідна інформація про себе (мова, країна, посилання на ресурс, версія ядра тощо). Вся ця інформація пересилається на сервер, а там стоїть певна програма (Apache, Nginx, LiteSpeed тощо). Вона читає отримані рядка і у залежності від питання генерує відповідь. Наприклад, чоловік вирішив відкрити google.com він вводить посилання в пошуковий рядок і браузер генерує запит. HTTP-заголовок браузера умовно виглядає так:
Стартова рядок
Покажи google.com
Запит
Я з Росії Використовую Google Chrome Мені потрібен HTML-код У мене є інформація про користувача
Тіло HTTP
Очікую
Сервер обробляє дані і формує відповідь:
Стартова рядок
Все добре, сторінка знайдена і працює
Відповідь
Я працюю на базі Apache Сторінка змінювалася 27052017 Кодування UTF-8
Тіло повідомлення
Отримуй код сторінки Це нова інформація від користувача (логін, пароль)
У тілі повідомлення передається HTML-код сторінки.
Особливості HTTPS
Зараз більшість сайтів переходить з HTTP, HTTPS-з'єднання. Відмінністю останнього є додаткове шифрування всієї переданої інформації. Перед початком обміну клієнт вимагає SSL-сертифікат для провверки автентичності сервера. Для розробника нічого не змінюються, і він може продовжувати працювати без змін свого коду.
Клієнт після отримання сертифіката перевіряє його на справжність (порівнюється сертифікат від сервера і сертифікат від центру). Якщо все добре, то запускається HTTP-протокол. Після підтвердження сертифіката заголовки шифруються через RSA. Тепер зловмисник не зможе вкрасти важливу інформацію користувача (логін, пароль тощо).
Перегляд HTTP діалогу
HTTP-діалог можна переглянути самостійно. Як фраз використовуються спеціальні скорочення – Date, Cookie, Host, Server і т. п. HTTP Переглянути
- заголовки можна за допомогою розширень для браузера. Також допоможуть в цьому онлайн-сервіси. Для перегляду HTTP-заголовків з плагінів використовують: Firebug. Live HTTP Headers. HTTP headers. З онлайн-сервісів використовуйте: Bertal.ru. stupid.su. Speed-Tester.Info. Вони перехоплюють одержувані від сервера заголовки і відображають їх в окремому вікні. Причому з однієї сторінки можна отримати одразу по 100-200 заголовків, і вони можуть періодично відправлятися через якийсь час. Наприклад, для перевірки online в соцмережах. HTTP-заголовки можна розділити на чотири типи: загальні (General headers) – застосовуються в запиті та відповіді; для запиту (Request headers) – для запиту; для відповіді (Response headers) – для відповідей; інформація про сутності (Entity headers) – запити і відповіді.
Стартова рядок від клієнта
Щоб почати обмін інформацією, спочатку формується головна рядок. Клієнт в ній говорить, який файл або об'єкт, який йому необхідний. Для цього застосовуються певні способи звернення до протоколу. Структура стартовою рядка складається з трьох частин:
Метод запиту
Об'єкт
протокол
POST
/c840024/upload.php
HTTP/1.1
Після цього обов'язково йде рядок Host і вказується URL-адресу сайту. Існують різні методи запиту. Програмісти найчастіше використовують: GET – запит до інформації (відповідь пересилається сервером у засланні). POST – відсилання інформації на сервер прихованим способом (відповідь не видно в адресному рядку). HEAD – такий же, як GET, але сервер поверне лише заголовок. PUT – передача великих запитів на URL; Після відправки стартовою рядки йдуть всі інші заголовки – User Agent, Cookie і т. п. Без первинного звернення неможливо почати обмін інформацією по HTTP. Заголовки ж є лише доповненням і в протоколі 1.0 і зовсім можуть не передаватися.
Передача інформації від клієнта
Після передачі початкового рядка клієнт відправляє на хостинг свої дані, наприклад, версію браузера і використовуваний мову. При бажанні сервер може додатково запитувати та іншу інформацію у клієнта:
Обов'язковими (передаються завжди) заголовками HTTP-запиту є Host, Referer, User Agent і Accept. На заголовки запиту програміст вплинути не може, вони формуються браузером. Налаштувати їх передачу можна в самій програмі через додаткові розширення.
HTTP-заголовки сервера – відповідь на запити сторінки
Після отримання запитів від клієнта, сторінка передає певні рядка сервера. У php для передачі HTTP
- заголовка використовується функція header(). Наприклад, можна повідомити про нове місцезнаходження сторінки: header('Location: http://www.site.com/'). Зі сторінки на сервері до клієнта відправляються дані з необхідною інформацією. Таким методом можна дізнаватися потрібну інформацію від сервера:
Головним чином ці запити потрібні для правильного відображення сторінки в браузері. Вони використовуються для поліпшення швидкості завантаження сторінок.
Заголовки сутності
Існують заголовки, які розуміють запит і відповідь, кожен запит прив'язується до певної сутності (сторінка з HTML-кодом). Завдяки цим запитам браузер уточнює інформацію про сторінку. Вони активно використовуються при кешуванні.
Найпопулярнішим заголовком суті є Last-Modified. Цей запит може надсилатися як від браузера до сервера, так і навпаки. Через цей заголовок клієнт дізнається, чи потрібно йому оновити свій кеш. Приклад діалогу : Клієнт: "У мене кеш від 16052016 змінювалась сторінка на сервері?" Сервер: "Так, кеш змінювався 19032017 ось нова версія."
Відповідь сервера
Після отримання стартової рядка від клієнта сервер формує свою відповідь.
HTTP
Версія протоколу
Заголовок статусу
пояснення
HTTP
1.1
200
OK
Якщо статус з'єднання підтверджений, то сервер може віддати клієнтові необхідну інформацію. Приклад http-діалогу можна побачити на малюнку нижче.
Запити формує програміст на сторінці за допомогою функції header().
Коди статусів
Для продовження спілкування клієнту потрібно бути впевненим в тому, що на хостингу все працює і відображається правильно. Щоб упевнитися в цьому, були придумані статуси відповідей. Вони являють собою тризначне число. Передавати статус можна зі сторінки як початковий заголовок, наприклад header(«http/11200 Ok»).
Кешовані сторінки
Щоб прискорити процес обміну сторінками, було винайдено кешування. Сторінка зберігається в стиснутому вигляді на локальне сховище комп'ютера. Тепер у заголовках не потрібно кожен раз пересилати великі файли. Необхідно тільки переконатися, що інформація на хостингу і у клієнта однакова. Створені спеціальні рядки запитів кешу, хостинг після отримання заголовків від клієнта перевіряє, чи є у нього кеш сторінки. Якщо його немає, то він запитує у сервера. В подальшому перед зверненням до браузеру у протоколі буде лише перевіряється, чи не змінювався кеш на сервері. Щоб перевірити стислу інформацію на актуальність, вказується в заголовках HTTP термін дії. Клієнт відправляє інформацію про те, які файли локально зберігаються у нього, а сервер вказує свою версію. Якщо вони збігаються, то браузер просто відображає свою версію кеша. Для SEO-оптимізації обов'язково треба вказувати дату в заголовках HTTP. Для цих цілей використовуються Last-Modified. Крім того, кеш можна оновлювати через якийсь час зберігання. Для цього використовується Expires. Для налаштування кешування використовується Cache-Control, завдяки йому можна дозволити або заборонити зберігати інформацію зі сторінки. Правильна настройка кешування дозволяє швидко просунути свої ресурси в топ видачі для пошуковиків. Алгоритми Yandex і Google періодично відвідують сторінки сайту і зберігають його кеш у себе в архівах. Через якийсь час вони звертаються до сервера для перевірки актуальності інформації. Якщо інформація була змінена, то відбувається оновлення файлів на сервері пошукача, і отримані дані проходять переіндексацію. Деякі радять передавати в заголовку Last-Modified поточну дату, сподіваючись на те, що робот з-за цього буде постійно тримати їх статтю в верху видачі пошуку. Але виходить, що алгоритмом доводиться кожен раз змінювати інформацію про кеші всередині себе і переіндексувати її знову. Це не завжди приводить до гарних результатів і іноді може тільки погіршити позиції статті.
Про URL-посилання у браузерною рядку
Для спілкування з хостингом користувач кожен раз вводить URL-посилання в адресний рядок браузера. Цей набір символів має певну структуру, і через нього передається необхідна інформація. Структура посилання складається з п'яти частин: протокол; інтересуемий об'єкт і його адресу; порт для обігу; HTTP рядка (при відправленні методом GET); query-код. За допомогою посилань можна звертатися не лише до сторінок типу HTTP, PHP і т. п. Через них можна проводити пошук у базах даних або надсилати інформацію на інший комп'ютер. Таким методом часто хакери проводять SQL-ін'єкції і різними методами крадуть інформацію з баз даних сайту.
Недоліком URL є відсутність підтримки інших алфавітів – в основному використовується латиниця. З-за цього потрібно правильно продумувати скорочена назва статті перед публікацією. Адже пошуковик по посиланню оцінює корисність ресурсу та інформацію, яку може надати сторінка для користувача. Тому при SEO-оптимізації окрему увагу слід приділити формуванню правильних URL для статті.