Orange-OpenSource / Orange-OpenSource/hurl

HTTP 103 Early hints display

Open
#900 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.