Merge pull request #1732 from nghttp2/stream-priority-doc
Document how to change stream prioritization scheme
This commit is contained in:
commit
b646c0a351
|
@ -479,3 +479,48 @@ its creation, like so:
|
||||||
When ALTSVC is received, :type:`nghttp2_on_frame_recv_callback` will
|
When ALTSVC is received, :type:`nghttp2_on_frame_recv_callback` will
|
||||||
be called as usual.
|
be called as usual.
|
||||||
|
|
||||||
|
Stream priorities
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
By default, the stream prioritization scheme described in :rfc:`7540`
|
||||||
|
is used. This scheme has been formally deprecated by :rfc:`9113`. In
|
||||||
|
order to disable it, send
|
||||||
|
:enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES` of
|
||||||
|
value of 1 via `nghttp2_submit_settings()`. This settings ID is
|
||||||
|
defined by :rfc:`9218`. The sender of this settings value disables
|
||||||
|
RFC 7540 priorities, and instead it enables RFC 9218 Extensible
|
||||||
|
Prioritization Scheme. This new prioritization scheme has 2 methods
|
||||||
|
to convey the stream priorities to a remote endpoint: Priority header
|
||||||
|
field and PRIORITY_UPDATE frame. nghttp2 supports both methods. In
|
||||||
|
order to receive and process PRIORITY_UPDATE frame, server has to call
|
||||||
|
``nghttp2_option_set_builtin_recv_extension_type(option,
|
||||||
|
NGHTTP2_PRIORITY_UPDATE)`` (see the above section), and pass the
|
||||||
|
option to `nghttp2_session_server_new2()` or
|
||||||
|
`nghttp2_session_server_new3()` to create a server session. Client
|
||||||
|
can send Priority header field via `nghttp2_submit_request()`. It can
|
||||||
|
also send PRIORITY_UPDATE frame via
|
||||||
|
`nghttp2_submit_priority_update()`. Server processes Priority header
|
||||||
|
field in a request header field and updates the stream priority unless
|
||||||
|
HTTP messaging rule enforcement is disabled (see
|
||||||
|
`nghttp2_option_set_no_http_messaging()`).
|
||||||
|
|
||||||
|
For the purpose of smooth migration from RFC 7540 priorities, client
|
||||||
|
is advised to send
|
||||||
|
:enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES` of
|
||||||
|
value of 1. Until it receives the first server SETTINGS frame, it can
|
||||||
|
send both RFC 7540 and RFC 9128 priority signals. If client receives
|
||||||
|
SETTINGS_NO_RFC7540_PRIORITIES of value of 0, or it is omitted ,
|
||||||
|
client stops sending PRIORITY_UPDATE frame. Priority header field
|
||||||
|
will be sent in anyway since it is an end-to-end signal. If
|
||||||
|
SETTINGS_NO_RFC7540_PRIORITIES of value of 1 is received, client stops
|
||||||
|
sending RFC 7540 priority signals. This is the advice described in
|
||||||
|
:rfc:`9218#section-2.1.1`.
|
||||||
|
|
||||||
|
Server has an optional mechanism to fallback to RFC 7540 priorities.
|
||||||
|
By default, if server sends SETTINGS_NO_RFC7540_PRIORITIES of value of
|
||||||
|
1, it completely disables RFC 7540 priorities and no fallback. By
|
||||||
|
setting nonzero value to
|
||||||
|
`nghttp2_option_set_server_fallback_rfc7540_priorities()`, server
|
||||||
|
falls back to RFC 7540 priorities if it sends
|
||||||
|
SETTINGS_NO_RFC7540_PRIORITIES value of value of 1, and client omits
|
||||||
|
SETTINGS_NO_RFC7540_PRIORITIES in its SETTINGS frame.
|
||||||
|
|
Loading…
Reference in New Issue