Проксі-кешування працює шляхом зберігання копій часто запитуваних веб-ресурсів на проксі-сервері, що дозволяє наступним запитам на той самий вміст обслуговуватися безпосередньо з кешу, замість повторного отримання їх з вихідного сервера.
Огляд проксі-кешування
Проксі-сервер діє як посередник між клієнтом і вихідним сервером. При налаштуванні для кешування він перехоплює запити клієнтів на веб-вміст (такий як HTML-сторінки, зображення, таблиці стилів або скрипти). Якщо запитуваний ресурс знайдено в локальному сховищі проксі та він вважається актуальним, проксі негайно його надає. В іншому випадку проксі пересилає запит до вихідного сервера, отримує ресурс, надає його клієнту та одночасно зберігає копію у своєму кеші для майбутнього використання.
Переваги проксі-кешування
Впровадження проксі-кешування дає кілька експлуатаційних переваг:
- Зменшена затримка: Вміст, що надається з географічно ближчого проксі-кешу, досягає клієнта швидше, ніж вміст, отриманий з віддаленого вихідного сервера, покращуючи сприйняту продуктивність програми.
- Зменшене споживання пропускної здатності: Надаючи кешований вміст, проксі мінімізує необхідність багаторазового завантаження одних і тих самих даних через зовнішні мережеві з'єднання, заощаджуючи пропускну здатність, особливо для часто доступних ресурсів.
- Зменшене навантаження на вихідні сервери: Кешування знімає значну частину запитів з вихідних серверів, дозволяючи їм обробляти більше унікальних запитів або працювати з меншим навантаженням, що може запобігти перевантаженням та покращити їхню чутливість.
- Покращений користувацький досвід: Швидший час завантаження та більш послідовна доставка вмісту безпосередньо сприяють кращому досвіду для кінцевих користувачів.
Як працює проксі-кеш: Потік запитів
Процес кешування включає низку кроків:
- Запит клієнта: Клієнт (наприклад, веб-браузер) надсилає HTTP-запит на ресурс до проксі-сервера.
- Пошук у кеші: Проксі-сервер отримує запит і перевіряє свій локальний кеш на наявність збереженої копії запитуваного ресурсу. Ключ кешу зазвичай формується з URL-адреси та, можливо, інших заголовків запиту.
- Збіг у кеші (актуальний): Якщо в кеші знайдено дійсну, актуальну копію ресурсу, проксі негайно надає цю кешовану копію клієнту. Це найшвидший шлях.
- Збіг у кеші (застарілий/потребує перевірки): Якщо копію знайдено, але вона вважається застарілою (термін її актуальності минув), проксі ініціює умовний запит до вихідного сервера. Цей запит включає заголовки перевірки, такі як
If-Modified-SinceабоIf-None-Match.- Якщо вихідний сервер відповідає
304 Not Modified, кешована копія все ще дійсна, і проксі надає її клієнту, оновлюючи інформацію про її актуальність. - Якщо вихідний сервер відповідає новою версією ресурсу (
200 OK), проксі оновлює свій кеш новим вмістом, надає його клієнту та оновлює інформацію про актуальність.
- Якщо вихідний сервер відповідає
- Промах кешу: Якщо в кеші не знайдено копії ресурсу, або якщо вихідний сервер вказує, що кешована копія більше не дійсна і надсилає новий вміст, проксі пересилає оригінальний запит клієнта до вихідного сервера.
- Відповідь вихідного сервера: Вихідний сервер обробляє запит і надсилає ресурс назад до проксі.
- Кешування та доставка: Проксі отримує ресурс від вихідного сервера, зберігає копію у своєму кеші (якщо вона підлягає кешуванню), а потім пересилає ресурс клієнту.
Анулювання кешу та актуальність
Підтримка актуальності кешу є критично важливою для забезпечення того, щоб клієнти отримували найновіший вміст. Механізми кешування HTTP в основному покладаються на заголовки відповіді, надані вихідним сервером.
Заголовки кешування HTTP
Вихідні сервери використовують специфічні заголовки відповіді HTTP, щоб інструктувати проксі (та клієнтські браузери) щодо того, як кешувати вміст:
-
Cache-Control: Основний і найпотужніший заголовок для директив кешування.max-age=<секунди>: Визначає максимальний час, протягом якого ресурс вважається актуальним.no-cache: Примушує проксі повторно перевіряти кешовану копію з вихідним сервером перед її використанням, навіть якщо запис кешу не є застарілим. Це не означає "не кешувати".no-store: Забороняє проксі зберігати будь-яку частину запиту або відповіді в будь-якому кеші.public: Вказує, що ресурс може бути кешований будь-яким кешем, включаючи спільні проксі-кеші.private: Вказує, що ресурс призначений для одного користувача і може бути кешований лише приватним кешем браузера, а не спільними проксі-кешами.must-revalidate: Примушує повторну перевірку з вихідним сервером, якщо запис кешу стає застарілим.proxy-revalidate: Подібно доmust-revalidate, але застосовується лише до спільних проксі-кешів.
```http