CINXE.COM
Early Hints — Firefox Source Docs documentation
<!doctype html> <html class="writer-html5" lang="en" data-content_root="../"> <head> <base href="https://firefox-source-docs.mozilla.org/networking/early_hints.html"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Early Hints — Firefox Source Docs documentation</title> <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50"> <link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=19f00094"> <link rel="stylesheet" type="text/css" href="../_static/graphviz.css?v=fd3f3429"> <link rel="stylesheet" type="text/css" href="../_static/copybutton.css?v=76b2166b"> <link rel="stylesheet" type="text/css" href="../_static/custom_theme.css?v=dc5ed815"> <link rel="stylesheet" type="text/css" href="../_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css?v=0a3b3ea7"> <link rel="shortcut icon" href="../_static/firefox.ico"><!--[if lt IE 9]> <script src="../_static/js/html5shiv.min.js"></script> <![endif]--> <script src="../_static/jquery.js?v=5d32c60e"></script> <script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script> <script src="../_static/documentation_options.js?v=5929fcd5"></script> <script src="../_static/doctools.js?v=9a2dae69"></script> <script src="../_static/sphinx_highlight.js?v=dc90522c"></script> <script src="../_static/clipboard.min.js?v=a7894cd8"></script> <script src="../_static/copybutton.js?v=30646c52"></script> <script src="../_static/design-tabs.js?v=36754332"></script> <script type="module" src="https://cdn.jsdelivr.net/npm/mermaid@11.2.0/dist/mermaid.esm.min.mjs"></script> <script type="module" src="https://cdn.jsdelivr.net/npm/@mermaid-js/layout-elk@0.1.4/dist/mermaid-layout-elk.esm.min.mjs"></script> <script type="module">import mermaid from "https://cdn.jsdelivr.net/npm/mermaid@11.2.0/dist/mermaid.esm.min.mjs";import elkLayouts from "https://cdn.jsdelivr.net/npm/@mermaid-js/layout-elk@0.1.4/dist/mermaid-layout-elk.esm.min.mjs";mermaid.registerLayoutLoaders(elkLayouts);mermaid.initialize({startOnLoad:false});</script> <script src="https://cdn.jsdelivr.net/npm/d3@7.9.0/dist/d3.min.js"></script> <script type="module"> import mermaid from "https://cdn.jsdelivr.net/npm/mermaid@11.2.0/dist/mermaid.esm.min.mjs"; window.addEventListener("load", () => mermaid.run()); </script> <script src="../_static/js/theme.js"></script> <link rel="index" title="Index" href="../genindex.html"> <link rel="search" title="Search" href="../search.html"> <link rel="next" title="New-to-Necko Resources - An Aggregation" href="new_to_necko_resources.html"> <link rel="prev" title="WebTransport (WIP)" href="webtransport/webtransport.html"> <meta http-equiv="X-Translated-By" content="Google"> <meta http-equiv="X-Translated-To" content="fr"> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.Gl1-asbZpBo.O/am=AAM/d=1/rs=AN8SPfq8JYd4C6ZalZRdqmFyVC7dnjezsw/m=corsproxy" data-sourceurl="https://firefox-source-docs.mozilla.org/networking/early_hints.html"></script> <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" rel="stylesheet"> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.Gl1-asbZpBo.O/am=AAM/d=1/exm=corsproxy/ed=1/rs=AN8SPfq8JYd4C6ZalZRdqmFyVC7dnjezsw/m=phishing_protection" data-phishing-protection-enabled="false" data-forms-warning-enabled="true" data-source-url="https://firefox-source-docs.mozilla.org/networking/early_hints.html"></script> <meta name="robots" content="none"> </head> <body class="wy-body-for-nav"> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.Gl1-asbZpBo.O/am=AAM/d=1/exm=corsproxy,phishing_protection/ed=1/rs=AN8SPfq8JYd4C6ZalZRdqmFyVC7dnjezsw/m=navigationui" data-environment="prod" data-proxy-url="https://firefox--source--docs-mozilla-org.translate.goog" data-proxy-full-url="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB" data-source-url="https://firefox-source-docs.mozilla.org/networking/early_hints.html" data-source-language="pl" data-target-language="fr" data-display-language="en-GB" data-detected-source-language="" data-is-source-untranslated="false" data-source-untranslated-url="https://translate.google.com/website?sl=pl&tl=fr&hl=en-GB&u=https://firefox-source-docs.mozilla.org/networking/early_hints.html&anno=2" data-client="tr"></script> <div class="wy-grid-for-nav"> <nav data-toggle="wy-nav-shift" class="wy-nav-side"> <div class="wy-side-scroll"> <div class="wy-side-nav-search"><a href="https://firefox--source--docs-mozilla-org.translate.goog/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB" class="icon icon-home"> Firefox Source Docs <img src="../_static/firefox-wordmark.svg" class="logo" alt="Logo"> </a><!-- -- This code is governed by the BSD license ----> <div> <h3>Quick search</h3> <script> (function () { var cx = "dd12886298f75dbef"; var gcse = document.createElement("script"); gcse.async = true; gcse.src = "https://cse.google.com/cse.js?cx=" + cx; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(gcse, s); })(); </script><gcse:search></gcse:search> </div> </div> <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> <p class="caption" role="heading"><span class="caption-text">Overview</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/glossary/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">A Glossary of Common Terms</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/overview/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">A Quick Guide to Mozilla Applications</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Getting Started</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/setup/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Getting Set Up To Work On The Firefox Codebase</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Working On Firefox</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/contributing/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Working on Firefox</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/bug-mgmt/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Bug Handling</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Firefox User Guide</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/devtools-user/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Firefox DevTools User Docs</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Source Code Documentation</span></p> <ul class="current"> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/mots/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Governance</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/browser/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Firefox Front-end</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/dom/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">DOM</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/editor/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Editor</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/layout/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Style system (CSS) & Layout</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/gfx/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Graphics</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/ipc/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Processes, Threads and IPC</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/devtools/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Firefox DevTools Contributor Docs</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/toolkit/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Toolkit</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/js/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">SpiderMonkey</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/jsloader/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">JS Loader</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/mobile/android/geckoview/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">GeckoView</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/mobile/android/fenix/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Fenix</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/mobile/android/focus-android/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Focus for Android</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/dom/bindings/webidl/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">WebIDL</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/modules/libpref/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">libpref</a></li> <li class="toctree-l1 current"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Networking</a> <ul class="current"> <li class="toctree-l2"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#how-to-s">How-to’s</a></li> <li class="toctree-l2"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#tutorials">Tutorials</a></li> <li class="toctree-l2 current"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#deep-dives">Deep Dives</a> <ul class="current"> <li class="toctree-l3"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#necko-design">Necko Design</a></li> <li class="toctree-l3 current"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#necko-features">Necko Features</a> <ul class="current"> <li class="toctree-l4"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/http/lifecycle.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">The Lifecycle of a HTTP Request</a></li> <li class="toctree-l4"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/dns/dns-over-https-trr.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">DNS over HTTPS (Trusted Recursive Resolver)</a></li> <li class="toctree-l4"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/url_parsers.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">URL Parsers</a></li> <li class="toctree-l4"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/webtransport/webtransport.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">WebTransport (WIP)</a></li> <li class="toctree-l4"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/captive_portals.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Captive Portal Detection</a></li> <li class="toctree-l4 current"><a class="current reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#">Early Hints</a></li> </ul></li> </ul></li> <li class="toctree-l2"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#references">References</a></li> </ul></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/remote/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Remote Protocols</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/services/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Services</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/permissions/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Permissions</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/uriloader/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">File Handling</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/widget/cocoa/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Firefox on macOS</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/widget/windows/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Firefox on Windows</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/toolkit/components/ml/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Firefox AI Runtime</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/accessible/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Accessibility</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/media/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Media Playback</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/code-quality/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Code quality</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/writing-rust-code/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Writing Rust Code</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/rust-components/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Rust Components</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/tools/profiler/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Gecko Profiler</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/performance/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Performance</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/storage/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Database bindings (SQLite, KV, …)</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/xpcom/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">XPCOM</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/nspr/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">NSPR</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/security/nss/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Network Security Services (NSS)</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/content-security/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Web Security Checks in Gecko</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">The Firefox Build System</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/mach/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Mach</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/tools/try/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Pushing to Try</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/build/buildsystem/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Build System</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/taskcluster/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Firefox CI and Taskgraph</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/tools/moztreedocs/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Managing Documentation</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/mozbuild/vendor/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Vendoring Third Party Components</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Testing & Test Infrastructure</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/automated-testing/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Automated Testing</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/treeherder-try/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Understanding Treeherder Results</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/sheriffed-intermittents/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Sheriffed intermittent failures</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/tests-for-new-config/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Turning on Firefox tests for a new configuration</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/intermittent/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Avoiding intermittent tests</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/testing-policy/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Testing Policy</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/ci-configs/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Configuration Changes</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/browser-chrome/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Browser chrome mochitests</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/chrome-tests/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Chrome Tests</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/marionette/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Marionette</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/geckodriver/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">geckodriver</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/test-verification/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Test Verification</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/webrender/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">WebRender Tests</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/mochitest-plain/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Mochitest</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/xpcshell/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">XPCShell tests</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/tps/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">TPS</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/web-platform/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">web-platform-tests</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/gtest/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">GTest</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/tools/fuzzing/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Fuzzing</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/tools/sanitizer/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Sanitizer</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing/perfdocs/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Performance Testing</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/tools/code-coverage/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Code coverage</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/testing-rust-code/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Testing & Debugging Rust Code</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Releases & Updates</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/update-infrastructure/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Mozilla Update Infrastructure</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/update-infrastructure/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#watershed-updates">Watershed Updates</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/update-infrastructure/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#desupport-updates">Desupport Updates</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/tools/update-verify/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Update Verify</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Localization & Internationalization</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/intl/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Internationalization</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/l10n/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Localization</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Firefox and Python</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/mozbase/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">mozbase</a></li> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/python/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Using third-party Python packages</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Metrics Collected in Firefox</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/metrics/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Metrics</a></li> </ul> </div> </div> </nav> <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> <nav class="wy-nav-top" aria-label="Mobile navigation menu"><i data-toggle="wy-nav-top" class="fa fa-bars"></i> <a href="https://firefox--source--docs-mozilla-org.translate.goog/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Firefox Source Docs</a> </nav> <div class="wy-nav-content"> <div class="rst-content"><!-- This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this file, - You can obtain one at http://mozilla.org/MPL/2.0/. --> <div role="navigation" aria-label="Page navigation"> <ul class="wy-breadcrumbs"> <li><a href="https://firefox--source--docs-mozilla-org.translate.goog/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB" class="icon icon-home" aria-label="Home"></a></li> <li class="breadcrumb-item"><a href="https://firefox--source--docs-mozilla-org.translate.goog/networking/index.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB">Networking</a></li> <li class="breadcrumb-item active">Early Hints</li> <li class="wy-breadcrumbs-aside"><a href="https://translate.google.com/website?sl=pl&tl=fr&hl=en-GB&u=https://bugzilla.mozilla.org/enter_bug.cgi?product%3DDeveloper%2BInfrastructure%26component%3DFirefox%2BSource%2BDocs%253A%2BContent%26short_desc%3DDocumentation%2Bissue%2Bon%2Bnetworking/early_hints%26comment%3DURL%2B%3D%2Bhttps://firefox-source-docs.mozilla.org/networking/early_hints.html%26bug_file_loc%3Dhttps://firefox-source-docs.mozilla.org/networking/early_hints.html" rel="nofollow">Report an issue</a> / <a href="https://firefox--source--docs-mozilla-org.translate.goog/_sources/networking/early_hints.md.txt?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB" rel="nofollow"> View page source</a></li> </ul> <hr> </div> <div role="main" class="document" itemscope itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <section id="early-hints"> <h1>Early Hints<a class="headerlink" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#early-hints" title="Link to this heading"></a></h1> <p><a class="reference external" href="https://translate.google.com/website?sl=pl&tl=fr&hl=en-GB&u=https://html.spec.whatwg.org/multipage/semantics.html%23early-hints">Early Hints</a> is an informational HTTP status code allowing server to send headers likely to appear in the final response before sending the final response. This is used to send <a class="reference external" href="https://translate.google.com/website?sl=pl&tl=fr&hl=en-GB&u=https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link">Link headers</a> to start <code class="docutils literal notranslate"><span class="pre">preconnect</span></code>s and <code class="docutils literal notranslate"><span class="pre">preload</span></code>s.</p> <p>This document is about the implementation details of Early Hints in Firefox. We focus on the <code class="docutils literal notranslate"><span class="pre">preload</span></code> feature, as it is the main feature interacting with classes. For Early Hint <code class="docutils literal notranslate"><span class="pre">preconnect</span></code> the Early Hints specific code is rather small and only touches the code path on <a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#early-hints-response-on-main-document-load"><span class="xref myst"><code class="docutils literal notranslate"><span class="pre">103</span> <span class="pre">Early</span> <span class="pre">Hints</span></code> responses</span></a>.</p> <pre class="mermaid"> sequenceDiagram participant F as Firefox participant S as Server autonumber F->>+S: Main document Request: GET / S-->>F: 103 Early Hints Response note over F: Firefox starts<br/>hinted requests note over S: Server Think Time S->>-F: 200 OK final response </pre> <p>Early Hints benefits originate from leveraging Server Think Time. The duration between response (2) and (3) arriving is the theoretical maximal benefit Early Hints can have. The server think time can originate from creating dynamic content by interacting with databases or more commonly when proxying the request to a different server.</p> <nav class="contents local" id="contents"> <ul class="simple"> <li><p><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#early-hints-response-on-main-document-load" id="id1"><code class="docutils literal notranslate"><span class="pre">103</span> <span class="pre">Early</span> <span class="pre">Hints</span></code> Response on Main Document Load</a></p></li> <li><p><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#main-document-final-response" id="id2">Main document Final Response</a></p></li> <li><p><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#preload-request-from-content-process" id="id3">Preload request from Content process</a></p></li> <li><p><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#early-hint-preload-request" id="id4">Early Hint Preload request</a></p></li> <li><p><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#early-hint-preload-response" id="id5">Early Hint Preload response</a></p></li> <li><p><a class="reference internal" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#final-setup" id="id6">Final setup</a></p></li> </ul> </nav> <section id="early-hints-response-on-main-document-load"> <h2><a class="toc-backref" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#id1" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">103</span> <span class="pre">Early</span> <span class="pre">Hints</span></code> Response on Main Document Load</a><a class="headerlink" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#early-hints-response-on-main-document-load" title="Link to this heading"></a></h2> <p>On <code class="docutils literal notranslate"><span class="pre">103</span> <span class="pre">Early</span> <span class="pre">Hints</span></code> response the <code class="docutils literal notranslate"><span class="pre">nsHttpChannel</span></code> handling main document load passes the link header and a few more from the <code class="docutils literal notranslate"><span class="pre">103</span> <span class="pre">Early</span> <span class="pre">Hints</span></code> response to the <code class="docutils literal notranslate"><span class="pre">EarlyHintsService</span></code></p> <p>When receiving a <code class="docutils literal notranslate"><span class="pre">103</span> <span class="pre">Early</span> <span class="pre">Hints</span></code> response, the <code class="docutils literal notranslate"><span class="pre">nsHttpChannel</span></code> forwards the <code class="docutils literal notranslate"><span class="pre">Link</span></code> headers in the <code class="docutils literal notranslate"><span class="pre">103</span> <span class="pre">Early</span> <span class="pre">Hints</span></code> response to the <code class="docutils literal notranslate"><span class="pre">EarlyHintsService</span></code> When the <code class="docutils literal notranslate"><span class="pre">DocumentLoadListener</span></code> receives a cross-origin redirect, it cancels all preloads in progress.</p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>Only the first <code class="docutils literal notranslate"><span class="pre">103</span> <span class="pre">Early</span> <span class="pre">Hints</span></code> response is processed. The remaining <code class="docutils literal notranslate"><span class="pre">103</span> <span class="pre">Early</span> <span class="pre">Hints</span></code> responses are ignored, even after same-origin redirects. When we receive cross origin redirects, all ongoing Early Hint preload requests are cancelled.</p> </div> <pre class="mermaid"> graph TD MainChannel[nsHttpChannel] EHS[EarlyHintsService] EHC[EarlyHintPreconnect] EHP[EarlyHintPreloader] PreloadChannel[nsIChannel] PCL[ParentChannelListener] MainChannel -- "nsIEarlyHintsObserver::EarlyHint(LinkHeader, Csp, RefererPolicy)<br/>via DocumentLoadListener" --> EHS EHS -- "rel=preconnect" --> EHC EHS -->|"rel=preload<br/>via OngoingEarlyHints"| EHP EHP -->|"CSP checks then AsyncOpen"| PreloadChannel PreloadChannel -->|mListener| PCL PCL -->|mNextListener| EHP </pre> </section> <section id="main-document-final-response"> <h2><a class="toc-backref" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#id2" role="doc-backlink">Main document Final Response</a><a class="headerlink" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#main-document-final-response" title="Link to this heading"></a></h2> <p>On the final response the <code class="docutils literal notranslate"><span class="pre">DocumentLoadListener</span></code> retrieves the list of link headers from the <code class="docutils literal notranslate"><span class="pre">EarlyHintsService</span></code>. As a side effect, the <code class="docutils literal notranslate"><span class="pre">EarlyHintPreloader</span></code> also starts a 10s timer to cancel itself if the content process doesn’t connect to the <code class="docutils literal notranslate"><span class="pre">EarlyHintPreloader</span></code>. The timeout shouldn’t occur in normal circumstances, because the content process connects to that <code class="docutils literal notranslate"><span class="pre">EarlyHintPreloader</span></code> immediately. The timeout currently only occurs when:</p> <ul class="simple"> <li><p>the main response has different CSP requirements disallowing the load (<a class="reference external" href="https://translate.google.com/website?sl=pl&tl=fr&hl=en-GB&u=https://bugzilla.mozilla.org/show_bug.cgi?id%3D1815884">Bug 1815884</a>),</p></li> <li><p>the main response has COEP headers disallowing the load (<a class="reference external" href="https://translate.google.com/website?sl=pl&tl=fr&hl=en-GB&u=https://bugzilla.mozilla.org/show_bug.cgi?id%3D1806403">Bug 1806403</a>),</p></li> <li><p>the user reloads a website and the image/css is already in the image/css-cache (<a class="reference external" href="https://translate.google.com/website?sl=pl&tl=fr&hl=en-GB&u=https://bugzilla.mozilla.org/show_bug.cgi?id%3D1815884">Bug 1815884</a>),</p></li> <li><p>the tab gets closed before the connect happens or possibly other corner cases.</p></li> </ul> <pre class="mermaid"> graph TD DLL[DocumentLoadListener] EHP[EarlyHintPreloader] PS[PreloadService] EHR[EarlyHintsRegistrar] Timer[nsITimer] DLL -- "(1)<br/>GetAllPreloads(newCspRequirements)<br/> via EarlyHintsService and OngoingEarlyHints" --> EHP EHP -->|"Start timer to cancel on<br/>ParentConnectTimeout<br/>after 10s"| Timer EHP -->|"Register(earlyHintPreloaderId)"| EHR Timer -->|"RefPtr"| EHP EHR -->|"RefPtr"| EHP DLL -- "(2)<br/>Send to content process via IPC<br/>List of Links+earlyHintPreloaderId" --> PS </pre> </section> <section id="preload-request-from-content-process"> <h2><a class="toc-backref" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#id3" role="doc-backlink">Preload request from Content process</a><a class="headerlink" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#preload-request-from-content-process" title="Link to this heading"></a></h2> <p>The Child process parses Link headers from the <code class="docutils literal notranslate"><span class="pre">103</span> <span class="pre">Early</span> <span class="pre">Hints</span></code> response first and then from the main document response. Preloads from the Link headers of the <code class="docutils literal notranslate"><span class="pre">103</span> <span class="pre">Early</span> <span class="pre">Hints</span></code> response have an <code class="docutils literal notranslate"><span class="pre">earlyHintPreloadId</span></code> assigned to them. The Preloader sets this <code class="docutils literal notranslate"><span class="pre">earlyHintPreloaderId</span></code> on the channel doing the preload before calling <code class="docutils literal notranslate"><span class="pre">AsyncOpen</span></code>. The <code class="docutils literal notranslate"><span class="pre">HttpChannelParent</span></code> looks for the <code class="docutils literal notranslate"><span class="pre">earlyHintPreloaderId</span></code> in <code class="docutils literal notranslate"><span class="pre">AsyncOpen</span></code> and connects to the <code class="docutils literal notranslate"><span class="pre">EarlyHintPreloader</span></code> via the <code class="docutils literal notranslate"><span class="pre">EarlyHintRegistrar</span></code> instead of doing a network request.</p> <pre class="mermaid"> graph TD PS[PreloadService] Preloader["FetchPreloader<br/>FontPreloader<br/>imgLoader<br/>ScriptLoader<br/>StyleLoader"] Parent["HttpChannelParent"] EHR["EarlyHintRegistrar"] EHP["EarlyHintPreloader"] PS -- "PreloadLinkHeader" --> Preloader Preloader -- "NewChannel<br/>SetEarlyHintPreloaderId<br/>AsyncOpen" --> Parent Parent -- "EarlyHintRegistrar::OnParentReady(this, earlyHintPreloaderId)" --> EHR EHR -- "OnParentConnect" --> EHP </pre> </section> <section id="early-hint-preload-request"> <h2><a class="toc-backref" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#id4" role="doc-backlink">Early Hint Preload request</a><a class="headerlink" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#early-hint-preload-request" title="Link to this heading"></a></h2> <p>The <code class="docutils literal notranslate"><span class="pre">EarlyHintPreloader</span></code> follows HTTP 3xx redirects and always sets the request header <code class="docutils literal notranslate"><span class="pre">X-Moz:</span> <span class="pre">early</span> <span class="pre">hint</span></code>.</p> </section> <section id="early-hint-preload-response"> <h2><a class="toc-backref" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#id5" role="doc-backlink">Early Hint Preload response</a><a class="headerlink" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#early-hint-preload-response" title="Link to this heading"></a></h2> <p>When the <code class="docutils literal notranslate"><span class="pre">EarlyHintPreloader</span></code> received the <code class="docutils literal notranslate"><span class="pre">OnStartRequest</span></code> it forwards all <code class="docutils literal notranslate"><span class="pre">nsIRequestObserver</span></code> functions to the <code class="docutils literal notranslate"><span class="pre">HttpChannelParent</span></code> as soon as it knows which <code class="docutils literal notranslate"><span class="pre">HttpChannelParent</span></code> to forward the <code class="docutils literal notranslate"><span class="pre">nsIRequestObserver</span></code> functions to.</p> <pre class="mermaid"> graph TD OPC["EHP::OnParentConnect"] OSR["EHP::OnStartRequest"] Invoke["Invoke StreamListenerFunctions"] End(("&shy;")) OPC -- "CancelTimer" --> Invoke OSR -- "Suspend Channel if called<br/>before OnParentReady" --> Invoke Invoke -- "Resume Channel if suspended<br/>Forward OSR+ODA+OSR<br/>Set Listener of ParentChanelListener to HttpChannelParent" --> End </pre> </section> <section id="final-setup"> <h2><a class="toc-backref" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#id6" role="doc-backlink">Final setup</a><a class="headerlink" href="https://firefox--source--docs-mozilla-org.translate.goog/networking/early_hints.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB#final-setup" title="Link to this heading"></a></h2> <p>In the end all the remaining <code class="docutils literal notranslate"><span class="pre">OnDataAvailable</span></code> and <code class="docutils literal notranslate"><span class="pre">OnStopRequest</span></code> calls are passed down this call chain from <code class="docutils literal notranslate"><span class="pre">nsIChannel</span></code> to the preloader.</p> <pre class="mermaid"> graph TD Channel[nsIChannel] PCL[ParentChannelListener] HCP[HttpChanelParent] HCC[HttpChannelChild] Preloader[FetchPreloader/imgLoader/...] Channel -- "mListener" --> PCL PCL -- "mNextListener" --> HCP HCP -- "mChannel" --> Channel HCP -- "..." --> HCC HCC -- "..." --> HCP HCC -- "mListener" --> Preloader Preloader -- "mChannel" --> HCC </pre> </section> </section> </div> </div> <footer> <div class="rst-footer-buttons" role="navigation" aria-label="Footer"><a href="https://firefox--source--docs-mozilla-org.translate.goog/networking/webtransport/webtransport.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB" class="btn btn-neutral float-left" title="WebTransport (WIP)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> <a href="https://firefox--source--docs-mozilla-org.translate.goog/networking/new_to_necko_resources.html?_x_tr_sl=pl&_x_tr_tl=fr&_x_tr_hl=en-GB" class="btn btn-neutral float-right" title="New-to-Necko Resources - An Aggregation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> </div> <hr> <div role="contentinfo"> <p></p> </div> Built with <a href="https://translate.google.com/website?sl=pl&tl=fr&hl=en-GB&u=https://www.sphinx-doc.org/">Sphinx</a> using a <a href="https://translate.google.com/website?sl=pl&tl=fr&hl=en-GB&u=https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://translate.google.com/website?sl=pl&tl=fr&hl=en-GB&u=https://readthedocs.org">Read the Docs</a>. </footer> </div> </div> </section> </div> <script> jQuery(function () { SphinxRtdTheme.Navigation.enable(true); }); </script> <script>function gtElInit() {var lib = new google.translate.TranslateService();lib.translatePage('pl', 'fr', function () {});}</script> <script src="https://translate.google.com/translate_a/element.js?cb=gtElInit&hl=en-GB&client=wt" type="text/javascript"></script> </body> </html>