MailRuChamps / hlcupdocs

High-loaded systems developer contest
https://highloadcup.ru
151 stars 34 forks source link

Значение заголовка Connection в патронах #52

Closed ei-grad closed 7 years ago

ei-grad commented 7 years ago

В патронах установлено значение Close, первая буква - заглавная. По стандарту* значение этого заголовка должно обрабатываться как case-insensitive, но некоторые реализации http-серверов (например, fasthttp на go) реагируют только на значение равное close, где все буквы маленькие.

Эта ситуация приводит к неочевидным различиям в поведении реализаций сервиса при тестировании. Например, если сервис игнорирует значение этого заголовка на фазах с GET запросами, то он получает преимущество за счет расхождения его поведения со спецификацией HTTP/1.1, так как yandex-tank не проверяет значение заголовка Connection в отправляемых запросах, и не контроллирует закрытие соединения сервером. А на фазах POST из за особенностей yandex-tank соединение необходимо закрывать после каждого запроса, в противном случае он не корректно обрабатывает ответ сервиса, и участники соревнования видят в результатах обстрела ошибку "Response is empty".

Возможно, во второй фазе стоит заменить Close на close, а в первой и третьей - заголовок Connection убрать.

[*] https://tools.ietf.org/html/rfc7230#section-6.1

atercattus commented 7 years ago

В стандарте как раз таки "close" и не сказано про иные варианты этого заголовка.

ei-grad commented 7 years ago

"Connection options are case-insensitive."

ei-grad commented 7 years ago

По сути предложения то как, keep-alive или не keep-alive в GET частях?

sat2707 commented 7 years ago

Теперь значения Connection: close|keep-alive