Re: GET запрос, 200 код и body_bytes_sent==0 при непустом объекте выдачи, как?

Maxim Dounin mdounin на mdounin.ru
Пн Фев 26 17:33:05 UTC 2018


Hello!

On Mon, Feb 26, 2018 at 04:46:34PM +0100, Yury Lyakh wrote:

> 
> День добрый всем,
> 
> не подскажет ли сообщество, в каких случаях nginx может писать в лог GET с таким раскладом:
> $response_code == 200
> $body_bytes_sent == 0
> $bytes_sent != 0
> 
> выдача из кеша (впрочем такая же картина и при MISS с хождением в бэкенд, есть ощущение что это связано с поведением пользователя в первую очередь):
> 
> "83.6.141.89" "-" "-" "[15/Feb/2018:14:37:24 +0000]" "GET /hls-vod/mjxCYlUG8gQh4WApAv94JA/1518726762/120/0x500003970b782deb/e58180d4dc134dd8a440d56214dbf890.mp4Frag6Num5.ts HTTP/2.0" "200" "0" "https://rube.ru/play/embed/10936010 <http://rube.ru/play/embed/10936010>" "Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C202 Safari/604.1" "257" "-" "https" "c.rube.ru <http://c.rube.ru/>" "60.000" "-" "95" "-" "HIT" "-" "-" "645" "2038"
> 
> "85.172.79.11" "-" "-" "[26/Feb/2018:15:01:22 +0000]" "GET /hls-vod/idSHrOHQR97_xWvsyJve1g/1519677788/119/0x500003970b8815d3/cead5d5a8e6a4e0bb99c5ea4244bc4b6.mp4Frag158Num158.ts HTTP/2.0" "200" "0" "https://rube.ru/play/embed/10878914?wmode=opaque&playlist=1&fakeFullscreen=1 <https://rube.ru/play/embed/10878914?wmode=opaque&playlist=1&fakeFullscreen=1>" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36" "235" "-" "https" "c.rube.ru <http://c.rube.ru/>" "19.907" "-" "98" "-" "HIT" "-" "-" "645" "2038"
> 
> здесь построчно соответственно поля равны:
> 200, 0, 257
> 200, 0, 235
> 
> То есть соединение корректно закрылось сразу после получения заголовков, от body клиент отмахался, не стал принимать?
> Если бы был HEAD запрос я бы еще понял что происходит, но тут GET.

В случае GET существует также более одного способа получить 
заголовок, но не получать тело.

В данном случае, с учётом использования HTTP/2, я бы предположил, 
что клиент присылает RST_STREAM после получения заголовка.  В 
error log'е при этом на уровне info будут детали, что-нибудь вроде 
"client canceled stream..." или "client terminated stream...", в 
зависимости от конкретных причин закрытия запроса.

Впрочем, может быть и просто закрыто соединение - в error log'е, 
опять же, будут детали на уровне info.

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru