nginx надсилає порожні 200 відповідей


19

Я налаштовую сервер з відмовою, який повинен приймати будь-який вхідний запит, і відповісти з порожньою відповіддю 200. Ідея полягає в тому, щоб мінімізувати час відповіді і переконатися, що ми не надсилаємо жодної 40x або 50x.

Я намагався використовувати return 200;для потрібних місць в Nginx, але мої системи моніторингу (Pingdom) не сподобалися у відповідь, і вважаю, що сервер не відповідає.

Чи є кращий спосіб зробити це, звичайно, з мінімальними накладними витратами на сервері?

Відповіді:


23

HTTP-код статусу 204 No Contentмається на увазі "Я виконав запит, але немає повернення":

10.2.5 204 Немає вмісту

Сервер виконав цей запит, але йому не потрібно повертати тіло об'єкта і, можливо, захоче повернути оновлену інформацію. Відповідь МОЖЕ включати нову або оновлену метейнформацію у вигляді заголовків сутностей, які, якщо вони є, ОБОВ'ЯЗКОВО бути пов'язані з запитуваним варіантом.

Якщо клієнт є користувальницьким агентом, він НЕ повинен змінювати свій вид документа на той, який спричинив надсилання запиту. Ця відповідь в першу чергу призначена для того, щоб дозволити введення в дію дій, не викликаючи змін у активному представленні документа агента користувача, хоча будь-яка нова або оновлена ​​метеоформація ДОЛЖНА застосовуватися до документа, який наразі знаходиться в активному вікні агента користувача.

Відповідь 204 НЕ МОЖЕ включати тіло повідомлення і, таким чином, завжди закінчується першим порожнім рядком після полів заголовка.


Привіт Алекс Дякую за замітку. Цікаво, чи визнаний 204 код відповіді всіма основними браузерами в наші дні. тобто якщо мій сервер почне надсилати 204, чи є ймовірність, що деякі відвідувачі (через браузери, мобільні телефони, термінали) отримають помилку?
Sparsh Gupta

1
@SparshGupta Я не знаю сумісності браузера, вибачте. Я зробив швидку перевірку в декількох браузерах (FF 7 і Safari під Mac OSX) - вони точно нічого не роблять. Наприклад, якщо у вас вже відкрита сторінка, ви поміщаєте URL-адресу, що повертається 204, в адресний рядок і натискаєте Enter, обидва браузери все ще показують цю попередню сторінку.
Олександр Азаров

29

Ви можете мати nginx повернути порожній HTTP 200 за допомогою конфігураційного блоку, наприклад:

location = /health {
  return 200;
  #access_log off;
}

Ви можете залишити коментар, access_logякщо ви не хочете, щоб усі ці перевірки здоров'я були зареєстровані.


6
Слід зазначити, що знак "=" після розташування важливий. Без нього цей файл повинен існувати, інакше nginx не поверне 200. З ним ви можете просто створити будь-яке місце, де ви хочете, і не турбуватися про файли, і nginx з радістю поверне 200.
Флорін Андрій

Як поєднати це з базовим auth, таким, що аутентифікований запит повертає 200, і неаутентифікований 401?
Кирило
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.