This feature adds the 'priority' request header for all HTTP requests with the priority information for the request at the time that it was sent. RFC 9218 (Extensible Prioritization Scheme for HTTP) defines a 'priority' HTTP request header to use for signaling request priority to origins (and intermediaries). It also defines negotiation processes and protocol-level frames for HTTP/2 and HTTP/3 to carry the same priority information. The header can only signal the initial priority for a resource when it was first requested while the frame-based mechanisms allow for modifying the priority after the fact. The header can operate end-to-end to the origin servers (and provide a mechanism for the origin to override the priority if recognized by intermediaries) while the frames are limited to operating on a link level. This feature is specifically for supporting the header-based prioritization scheme.
None
The priority information for a given request is already exposed in HTTP/2 and HTTP/3 in the frame-based priority fields (and weights in HTTP/2). This moves the same information directly into the headers for HTTP/2 and HTTP/3 only.
Does this intent deprecate or change behavior of existing APIs, such that it has potentially high risk for Android WebView-based applications?
None
None
The "Priority" header is exposed in both the Dev Tools network panel (in the Request Headers) and in the Netlog.
HTTP headers (and protocols) are not testable in Web Platform Tests.
DevTrial on desktop | 119 |
DevTrial on Android | 119 |
--
You received this message because you are subscribed to the Google Groups "blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+...@chromium.org.
To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAPq58w5KJijit8ObBhWKzCnLjro7jSfAsxfPPZ66NwmTO_ZT%3Dg%40mail.gmail.com.
Specification
https://datatracker.ietf.org/doc/rfc9218Summary
This feature adds the 'priority' request header for all HTTP requests with the priority information for the request at the time that it was sent. RFC 9218 (Extensible Prioritization Scheme for HTTP) defines a 'priority' HTTP request header to use for signaling request priority to origins (and intermediaries). It also defines negotiation processes and protocol-level frames for HTTP/2 and HTTP/3 to carry the same priority information. The header can only signal the initial priority for a resource when it was first requested while the frame-based mechanisms allow for modifying the priority after the fact. The header can operate end-to-end to the origin servers (and provide a mechanism for the origin to override the priority if recognized by intermediaries) while the frames are limited to operating on a link level. This feature is specifically for supporting the header-based prioritization scheme.
Blink component
Blink>NetworkTAG review
NoneTAG review status
Not applicableRisks
Interoperability and Compatibility
None
Gecko: Shipped/Shipping
WebKit: Shipped/Shipping
Web developers: No signals
Other signals:Security
The priority information for a given request is already exposed in HTTP/2 and HTTP/3 in the frame-based priority fields (and weights in HTTP/2). This moves the same information directly into the headers for HTTP/2 and HTTP/3 only.
WebView application risks
Does this intent deprecate or change behavior of existing APIs, such that it has potentially high risk for Android WebView-based applications?
None
Goals for experimentation
Enable the header for a sample of the population and make sure there is no negative feedback before turning on globally.Ongoing technical constraints
None
Debuggability
The "Priority" header is exposed in both the Dev Tools network panel (in the Request Headers) and in the Netlog.
Will this feature be supported on all six Blink platforms (Windows, Mac, Linux, Chrome OS, Android, and Android WebView)?
YesIs this feature fully tested by web-platform-tests?
NoHTTP headers (and protocols) are not testable in Web Platform Tests.
Flag name on chrome://flags
Finch feature name
PriorityHeaderRequires code in //chrome?
FalseTracking bug
https://bugs.chromium.org/p/chromium/issues/detail?id=1404785Estimated milestones
DevTrial on desktop 119
DevTrial on Android 119 Link to entry on the Chrome Platform Status
https://chromestatus.com/feature/5109106573049856Links to previous Intent discussions
Intent to prototype: https://groups.google.com/a/chromium.org/g/blink-dev/c/eEeDzwtw5v0This intent message was generated by Chrome Platform Status.
--
Why has this not been sent to the TAG?
To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAA44PQiO3mJB-NnBPaDU6fNTHNzxgy%2B-%3D-Proz-sGZVVgVk-MA%40mail.gmail.com.
Can you briefly describe what the header parts are good for, and how would developers use them?
Gecko: Shipped/Shipping
WebKit: Shipped/ShippingAny links that show this is shipping?I see some evidence that this is available behind a flag in Safari, but nothing beyond that.
Is this feature fully tested by web-platform-tests?
NoHTTP headers (and protocols) are not testable in Web Platform Tests.
I don't think that's correct. You could create custom handlers that would reflect the request's priority header in the response.
On Tue, Oct 10, 2023 at 3:18 AM Yoav Weiss <yoav...@chromium.org> wrote:Can you briefly describe what the header parts are good for, and how would developers use them?There are 2 parts to the header which is formatted as a structured-field dictionary (comma-separated entries with each entry being key=value.The 2 keys are:u (urgency) = numeric from 0 to 7 with 0 being the highest priority and 7 being the lowest (and 3 being the default).i (incremental) = boolean to specify if the response should be interleaved with other responses of the same priority (defaults to disabled).e.g. "priority: u=1, i" would indicate a high priority request that allows for interleaving.I'm not expecting a lot of direct web developer use of it. It's more for the HTTP/2 and HTTP/3 servers to use to prioritize multiplexed responses and to align with Firefox and Safari for any servers that prefer to just use the headers for prioritization and not do the frame-level priorities
(which Chrome is the only browser to use for HTTP/3).
In theory, a web developer could prioritize the processing of higher-priority requests differently than low-priority requests but most cases where that makes sense would probably be relying on other headers like "Sec-Purpose: prefetch" if they want to segregate their infrastructure and de-prioritize background fetches.
Gecko: Shipped/Shipping
WebKit: Shipped/ShippingAny links that show this is shipping?I see some evidence that this is available behind a flag in Safari, but nothing beyond that.Safari removed the explicit flag in 16.4 for HTTP/3 and enabled it for a subset of users but I don't see mention of it in the release notes in 16.4 or later so the status hasn't been communicated externally. When HTTP/3 does get used in Safari, the Priority header is always enabled. I have a test page here (https://headers.patrickmeenan.com/) that has HTTP/3 enabled and will echo the protocol and headers that were received by the server. If you can get Safari to use HTTP/3 (at a minimum you have to turn off private relay) then it will show the Priority header.Firefox pretty reliably switches to HTTP/3 on the test page after a few reloads and will show the header.The test page also tests what the browser does if fetch() is called with a priority header that is application-set. Safari (and the Chrome implementation) defer to the application-set value and do not add the protocol-specific value in that case. Firefox sends 2 Priority headers.
So this will be sent in both H2 and H3?
(which Chrome is the only browser to use for HTTP/3).Do you know why other browsers don't implement the frame version?
Would be great to get an official word from them on what they are shipping and when. Maybe file (non-blocking) positions on this?