Разрешено ли серверу HTTP/2 отправлять кадры PRIORITY?

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

1 ответ

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

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

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

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

Другие вопросы по тегам