Я использую 303 кода (я считаю, правильно), чтобы перенаправить пользователя после того, как он отправил форму. К сожалению, это означает, что несколько раз в день я получаю предупреждение от netdata следующего содержания:
netdata notification
yoursite needs attention
web_log_yoursite.response_statuses
1m redirects = 21.1%
the ratio of HTTP redirects (3xx except 304) over the last minute
Я думаю, что хотел бы настроить это поведение так, чтобы оно стало «(3xx, кроме 304 или 303)», но я понятия не имею, возможно ли это, и как бы я это сделал.
Спасибо
Вы правильно понимаете цель 303 See Other
, как описано в RFC 7231 6.4.4.
Этот код состояния применим к любому методу HTTP. Он в основном используется, чтобы разрешить вывод действия POST для перенаправления пользовательского агента на выбранный ресурс, поскольку при этом предоставляется информация, соответствующая ответу POST, в форме, которая может быть отдельно идентифицирована, добавлена в закладки и кэширована, независимо от оригинальный запрос.
Кажется, ваш сайт основан на этих запросах POST и их перенаправлениях больше, чем на обычных сайтах, что превышает порог, определенный в 1m_redirects
шаблон NetData's conf.d/health.d/web_log.conf
. Проще всего было бы увеличить пороги на линиях warn:
и crit:
, поскольку "(3xx кроме 304)" в конфигурации - это просто информационный текст, а не часть логики, используемой для сопоставления строк журнала:
template: 1m_redirects
on: web_log.response_statuses
families: *
lookup: sum -1m unaligned of redirects
calc: $this * 100 / $1m_requests
units: %
every: 10s
warn: ($1m_requests > 120) ? ($this > (($status >= $WARNING ) ? ( 1 ) : ( 20 )) ) : ( 0 )
crit: ($1m_requests > 120) ? ($this > (($status == $CRITICAL) ? ( 20 ) : ( 30 )) ) : ( 0 )
delay: up 2m down 15m multiplier 1.5 max 1h
info: the ratio of HTTP redirects (3xx except 304) over the last minute
to: webmaster
Особое обращение с 304 Not Modified
исходит из того факта, что это действительно сопоставимо с 200 OK
:
RFC 7232, 4.1. 304 Не изменено
В
304 (Not Modified)
код состояния указывает на то, что условный запрос GET или HEAD был получен и привел к200 (OK)
ответ, если бы не факт, что условие оценивается как ложное. Другими словами, серверу нет необходимости передавать представление целевого ресурса, потому что запрос указывает, что клиент, который сделал запрос условным, уже имеет допустимое представление; поэтому сервер перенаправляет клиента на использование этого сохраненного представления, как если бы это была полезная нагрузка ответа 200 (ОК).
Это определение соблюдается правильно в python.d/web_log.chart.p
линии 746-761 и 906-921:
746/906: def get_data_per_statuses(self, code):
747/907: """
748/908: :param code: str: response status code. Ex.: '202', '499'
749/909: :return:
750/910: """
751/911: code_class = code[0]
752/912: if code_class == '2' or code == '304' or code_class == '1':
753/913: self.data['successful_requests'] += 1
754/914: elif code_class == '3':
755/915: self.data['redirects'] += 1
756/916: elif code_class == '4':
757/917: self.data['bad_requests'] += 1
758/918: elif code_class == '5':
759/919: self.data['server_errors'] += 1
760/920: else:
761/921: self.data['other_requests'] += 1
Если вы действительно хотите изменить это, чтобы исключить 303
, затем добавьте or code == '303'
на строки 752 и 912.