Сервер взяв тайм-аут: як виправити помилку 408
Уявіть ситуацію: ви заходите на Netflix, обираєте фільм, що давно висить у списку бажань та отримуєте повідомлення:
«Наразі не вдається відтворити цей контент. Спробуйте знову пізніше або виберіть щось інше.»
Так виглядає помилка 408 Request Timeout з клієнтської сторони. Що вона означає та що робити, якщо друзі вже прийшли, снеки куплені, а ви серйозно налаштовані на перегляд фільму?
Розберімося, як виправити помилку 408 та не лише з клієнтської сторони. Розглянемо, що робити, щоб у користувачів вашого сервісу такі проблеми виникали якнайрідше.
Що таке помилка очікування запиту?
Помилки четвертого класу, що виглядають як 4хх вважаються клієнтськими. Вони означають, що клієнт робить неправильні запити на сервер.
Помилка 408 Request Timeout — це код статусу відповіді HTTP, що означає, що час відповіді сервера на ваш запит перевищує час, виділений сервером на цю відповідь. Він видає вам помилку очікування, замість того, щоб продовжити чекати відповідь на ваш запит. Сервер бере тайм-аут.
Помилка 408 нагадує серверну помилку 504 Gateway Timeout. Ця помилка означає, що сервер, що працює як шлюз чи проксі-сервер, не дочекався відповіді від іншого сервера у ланцюжку вузлів для того, щоб завершити запит.
Тобто помилка 408 — це повідомлення від активного сервера, до якого під’єднався клієнт, наприклад, веббраузер. А 504 — повідомлення від шлюзу чи проксі. В цьому і відмінність.
Як виглядає помилка 408?
Залежно від вебсайту чи вебсервера, текст помилки може відрізнятися. Зазвичай, ви можете отримати такі варіанти:
- Request Timeout
- 408: request Timeout
- HTTP Error 408 — Request Timeout
- 408 Request Time-out
- The Request Has Timed Out
Клієнтська чи серверна помилка?
Хоч клас помилки вказує на те, що вона йде з боку клієнта, це не завжди так.
При діагностиці проблеми у власній програмі, легко проігнорувати більшість клієнтського коду та компонентів, таких як HTML, CSS, клієнтський JavaScript тощо.
Також причиною помилки 408 може бути сам сервер. Він може бути не так налаштований і неправильно обробляти запити, що призведе до 408 Request Timeout та інших проблем з маршрутизацією трафіку.
Далі розберемо кілька варіантів, як виправити помилку 408.
Усунення несправностей на стороні клієнта
Оскільки ця помилка вважається клієнтською, спершу розглянемо, що йому з нею робити:
- Перевірте запитувану URL-адресу
Найпоширеніша причина — неправильно введена URL-адреса.
Багато серверів захищені від несподіваних запитів до ресурсів, до яких клієнт не повинен мати доступ. Помилившись літерою в адресі ви можете потрапити на такий ресурс. Тож першим ділом, отримавши помилку 408, перевірте чи правильно ви ввели URL-адресу, щоб переконатися, що це саме той ресурс, який ви очікували.
- Оновіть сторінку
Перш ніж переходити до більш серйозних дій, можливо, оновлення сторінки розв’яже вашу проблему.
- Перевірте своє підключення до мережі
Спробуйте зайти на інший сайт. Якщо він також погано завантажується, то у вас проблеми з підключенням. Перезавантажте роутер та оновіть браузер, якщо оновлення доступне.
Ці дії мають розв’язати проблему. Але раптом ні: спробуйте очистити кеш браузера, скинути його налаштування до дефолтних та відключити несправні розширення.
Якщо ви опинилися з іншої сторони помилки
- Зробіть повну резервну копію програми
Перестрахуйтеся та зробіть повну копію програми, бази даних і всіх інших компонентів перед тим як вносити зміни. Ще краще, якщо ви можете розмістити копію на проміжному неактивному або недоступному для інших сервері. Так ви отримаєте чистий полігон, на якому можна не боятися експериментувати з виправленнями проблем.
- Діагностуйте помилку очікування запиту 408
У документі стандартів RFC7235 HTTP/1.1 Семантика та контент вказано, що сервер повинен містити спеціальний заголовок Connection із вказівкою close як частину своєї відповіді, щоб повідомити клієнта, що зв’язок має бути закрито.
Це сповіщає, що сервер вирішив припинити з’єднання, замість очікування завершення дії. Коли клієнт отримує Connection: close він може повторити з’єднання ще раз.
- Налаштуйте поширені платформи
Якщо на клієнтській стороні все добре, а ви використовуєте звичайні пакети ПЗ на сервері, який відповідає 408 Request Timeout, перевірте стабільність та функціональність платформ.
Найпоширеніші системи керування вмістом або CMS, такі як WordPress, Joomla! і Drupal, зазвичай добре протестовані, але при змінах в базових розширеннях або коду PHP, може виникнути проблема, що видасть помилку 408. Що можна зробити:
1. Відкотіть останні оновлення
Якщо ви нещодавно оновили CMS, а потім почали отримувати 408 Request Timeout, спробуйте повернутися до попередньої версії, яку ви встановили, коли все працювало нормально. Так само і з розширеннями або модулями: вони теж можуть спричиняти проблеми на стороні сервера, тому повернення до попередніх версій може допомогти.
2. Видаліть нові розширення, модулі або плагіни
Розширення дають нові можливості, але також можуть контролювати систему та вносити в неї зміни. Наприклад, у код PHP, HTML, CSS, JavaScript або базу даних.
Краще видалити нові розширення, після встановлення яких почала з’являтися помилка.
3. Перевірте наявність неочікуваних змін бази даних
Може бути й таке, що ви видалили розширення, але це не скасує всі зміни в базі даних, які це розширення встигло зробити. Якщо ви впевнені, що помилка спричинена саме тим розширенням, яке ви видалили, доведеться відкрити базу даних та вручну переглядати таблиці та записи, які могли бути змінені цим розширенням.
Усунення несправностей на стороні сервера
Якщо ви не працюєте з CMS або працюєте, але впевнені, що 408 Request Timeout пов’язана не із цим, наступні поради можуть допомогти усунути несправності:
- Підтвердьте конфігурацію сервера
Варто перевірити файли конфігурації ПЗ вашого вебсервера, бо проблема може критися у ненавмисному перенаправленні запитів чи інструкціях з обробки запитів.
Інструкції в залежності від вашого вебсервера відрізняються, але головна ідея однакова: спробуйте знайти у конфігураційному файлі директиви тайм-ауту, які здаються вам дивними. Закоментуйте їх, використовуючи префікс символу #, та перезавантажте сервер, щоб перевірити чи розв’яже це вашу проблему.
- Перегляньте логи
Так ви побачите історію того, що робила програма, які сторінки відкривала, до яких серверів під’єднувалася та інше. Тут може критися відповідь на ваше питання.
- Налагодьте свій код програми або сценарії
Якщо нічого не допомогло, можливо, причиною проблеми є якийсь спеціальний код у вашій програмі. Спробуйте діагностувати, звідки може походити проблема, шляхом ручного налагодження вашої програми, а також аналізу журналів програми та сервера. В ідеалі створіть копію всієї програми на локальній машині розробки та виконайте покроковий процес налагодження, який дозволить вам відтворити точний сценарій, у якому стався тайм-аут запиту 408, і переглянути код програми в той момент, коли щось йде не так.
Висновок
Є 40 помилок з боку клієнта, одну з яких ми сьогодні розібрали. Виявляється, що не все так однозначно, адже її може спричинити сам сервер.
Якщо за одним рядком помилки ховається так багато всього, то як розібратися з роботою серверів? Що обов’язково потрібно знати та вміти, а що можна прогуглити в момент, коли стикнешся з проблемою?
Дізнаєтесь на нашому курсі «Адміністрування вебсерверів на Linux». Зараз ми проводимо онлайн-заняття в індивідуальному режимі, тож ви можете самостійно обрати дату старту курсу та інтенсивність навчання.
Пишіть у коментарях, які помилки нам варто розібрати у наступних матеріалах?