Разрешено ли серверу HTTP/2 отправлять кадры ПРИОРИТЕТА?

Я хочу, чтобы сервер отправлял кучу контента, но я хочу, чтобы он отправлялся по порядку. Очевидно, что сервер может просто отправлять вещи по порядку, но было бы неплохо, если бы сервер мог на самом деле устанавливать зависимости потоков (чтобы сделать это явным, разрешить клиенту изменять приоритеты, если он не согласен, и т. д.). Это разрешено? В частности, я хочу отправить PUSH_PROMISE, за которым сразу следует кадр PRIORITY, чтобы установить обещанный поток как зависимость от предыдущего потока.


person Brendan Long    schedule 21.06.2015    source источник


Ответы (2)


Отличный вопрос! Не очень хороший ответ, но вот что я нашел:

  • (8.2.1) "Отправляемые ответы всегда связаны с явный запрос от клиента. Кадры PUSH_PROMISE, отправленные сервером, отправляются в поток этого явного запроса. Кадр PUSH_PROMISE также включает обещанный идентификатор потока, выбранный из идентификаторов потока, доступных серверу (см. Раздел 5.1.1)"< /em> То есть PUSH_PROMISE идет с заголовками исходного потока, а затем включает идентификатор обещанного потока. Таким образом, новый поток зависит от исходного потока.

  • (6.3) Не указывает, кто может отправлять кадр ПРИОРИТЕТ, но это относится к 5.3. (5.3) говорит, что только клиент может установить приоритет как часть кадра HEADERS. Во втором предложении этого абзаца говорится, что кадр ПРИОРИТЕТА может использоваться иначе... как клиентом, так и сервером? Не совсем понятно, но если и приходится ставить, то я бы сказал, что только от клиента.

person dsign    schedule 21.06.2015
comment
Я читал в нескольких книгах, что спецификацию следует читать скорее как предложение, а не как самоуверенный документ. - person xpepermint; 07.08.2020

В документации по HTTP/2 нет ясности по этому поводу, но для части ПРИОРИТЕТА можно понять, что она может быть отправлена ​​кем угодно практически в любое время. Проверьте эти дебаты, и вы увидите, что некоторые группы обсуждают такие случаи. Я бы сказал, что вы не должны игнорировать это, потому что, если это не запрещено спецификацией, то это разрешено, и вы должны с этим справиться.

person xpepermint    schedule 07.08.2020