Orange-OpenSource / Orange-OpenSource/hurl
HTTP 103 Early hints display
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 19.2k
- Forks
- 745
- Avg merge
- 5h 3m
- Merged PRs (30d)
- 60
Description
Early hints is a new HTTP status code that helps browsers decide what content to preload before the page has even started to arrive.
For a single request, you can get multiple hints response along with the final HTTP response.
For instance:
$ curl -I https://tradingstrategy.ai
HTTP/2 103
link: <./_app/immutable/assets/_layout-7ed14c6c.css>; as=style; nopush; rel=preload, <./_app/immutable/assets/TradingDataInfoRow-028f36b2.css>; as=style; nopush; rel=preload, <./_app/immutable/assets/TradingEntityHit-bf38e9c9.css>; as=style; nopush; rel=preload, <./_app/immutable/assets/_page-fa48a47b.css>; as=style; nopush; rel=preload
HTTP/2 200
date: Sat, 15 Oct 2022 10:24:59 GMT
content-type: text/html
cache-control: public, max-age=300
link: <./_app/immutable/assets/_layout-7ed14c6c.css>; rel="preload";as="style"; nopush, <./_app/immutable/assets/TradingDataInfoRow-028f36b2.css>; rel="preload";as="style"; nopush, <./_app/immutable/assets/TradingEntityHit-bf38e9c9.css>; rel="preload";as="style"; nopush, <./_app/immutable/assets/_page-fa48a47b.css>; rel="preload";as="style"; nopush, <./_app/immutable/start-6028fea3.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/preload-helper-aa6bc0ce.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/index-dad436dc.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/singletons-248da0ef.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/control-03134885.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/env-public-6aa99648.js>; rel="modulepreload"; nopush, <./_app/immutable/components/pages/_layout.svelte-5f9d934c.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/stores-25ec0b37.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/TradingDataInfoRow.svelte_svelte_type_style_lang-651b3d91.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/index-74ad4020.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/index-fd35bc66.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/SocialIcon-c7ef1d3a.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/TextInput-7efb7a7f.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/navigation-2334b0d5.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/TradingEntityHit-d9b4ff43.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/config-c9aa519c.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/_commonjsHelpers-456b4ed0.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/price-da71e204.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/formatters-94a41a01.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/Button-da903488.js>; rel="modulepreload"; nopush, <./_app/immutable/components/pages/_page.svelte-cb96a62e.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/BlogPostTile-c0ba3c38.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/BlogPostTimestamp-45fd6678.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/index-9540c767.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/index-20e4a3bd.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/index-1587a130.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/googleMeta-e9fbaf50.js>; rel="modulepreload"; nopush, <./_app/immutable/modules/pages/_page.ts-2c681e61.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/client-f72519ba.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/_page-3a7d43d7.js>; rel="modulepreload"; nopush
set-cookie: color-mode=system; Path=/; Expires=Sun, 15 Oct 2023 10:24:59 GMT; SameSite=Lax
x-powered-by: Express
x-sveltekit-page: true
cf-cache-status: DYNAMIC
report-to: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=ItkxMXUqjjtjrI28HwYAJy%2B%2FrfAiTlUMtxrCCGFSyo%2FH3gKJ4PwYvIWPDEViB7emTkFDk6piHo%2Bcy1n0BFjrSCYrY4Iu3BBcAX6F15iJ2DD%2F3cSDrKWLdUnG3nRJX4qUabRuREck4GvP3mKfJyChiQ%3D%3D"}],"group":"cf-nel","max_age":604800}
nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
server: cloudflare
cf-ray: 75a7d920cb54d6be-CDG
One can note:
...
HTTP/2 103
HTTP/2 200
With the same request Hurl doesn't seem to display these 103 responses:
$ echo 'HEAD https://tradingstrategy.ai' | hurl -i
HTTP/2 200
date: Sat, 15 Oct 2022 10:26:19 GMT
content-type: text/html
cache-control: public, max-age=300
link: <./_app/immutable/assets/_layout-7ed14c6c.css>; rel="preload";as="style"; nopush, <./_app/immutable/assets/TradingDataInfoRow-028f36b2.css>; rel="preload";as="style"; nopush, <./_app/immutable/assets/TradingEntityHit-bf38e9c9.css>; rel="preload";as="style"; nopush, <./_app/immutable/assets/_page-fa48a47b.css>; rel="preload";as="style"; nopush, <./_app/immutable/start-6028fea3.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/preload-helper-aa6bc0ce.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/index-dad436dc.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/singletons-248da0ef.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/control-03134885.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/env-public-6aa99648.js>; rel="modulepreload"; nopush, <./_app/immutable/components/pages/_layout.svelte-5f9d934c.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/stores-25ec0b37.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/TradingDataInfoRow.svelte_svelte_type_style_lang-651b3d91.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/index-74ad4020.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/index-fd35bc66.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/SocialIcon-c7ef1d3a.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/TextInput-7efb7a7f.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/navigation-2334b0d5.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/TradingEntityHit-d9b4ff43.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/config-c9aa519c.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/_commonjsHelpers-456b4ed0.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/price-da71e204.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/formatters-94a41a01.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/Button-da903488.js>; rel="modulepreload"; nopush, <./_app/immutable/components/pages/_page.svelte-cb96a62e.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/BlogPostTile-c0ba3c38.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/BlogPostTimestamp-45fd6678.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/index-9540c767.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/index-20e4a3bd.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/index-1587a130.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/googleMeta-e9fbaf50.js>; rel="modulepreload"; nopush, <./_app/immutable/modules/pages/_page.ts-2c681e61.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/client-f72519ba.js>; rel="modulepreload"; nopush, <./_app/immutable/chunks/_page-3a7d43d7.js>; rel="modulepreload"; nopush
set-cookie: color-mode=system; Path=/; Expires=Sun, 15 Oct 2023 10:26:19 GMT; SameSite=Lax
x-powered-by: Express
x-sveltekit-page: true
cf-cache-status: DYNAMIC
report-to: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=kCZu8yAOvNVg8ltxBbW6DzUvuTfHL%2BSYHr2e1XYG0Z1a0Kx9KFRZ0%2B5ikSVUFpybGXkuEWjldAhDJ0R%2BLOlM4Z44z78ZepjV9Tg0xIRmYV8RvdvBMbsAlhDJ6lJq%2FfHikjVUfEPHxGDHhNenp9BKPA%3D%3D"}],"group":"cf-nel","max_age":604800}
nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
server: cloudflare
cf-ray: 75a7db190f1fd07b-CDG
ressources:
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the paired curl and hurl commands against the tradingstrategy.ai URL, then trace the Hurl CLI's HTTP response-display path. The work is done when interim HTTP/2 103 Early Hints responses are displayed alongside the final response, with behavior checked against the RFC 8297 example.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- cli, networking
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100