File: usage.rst

package info (click to toggle)
firefox 142.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,591,884 kB
  • sloc: cpp: 7,451,570; javascript: 6,392,463; ansic: 3,712,584; python: 1,388,569; xml: 629,223; asm: 426,919; java: 184,857; sh: 63,439; makefile: 19,150; objc: 13,059; perl: 12,983; yacc: 4,583; cs: 3,846; pascal: 3,352; lex: 1,720; ruby: 1,003; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 53; csh: 10
file content (68 lines) | stat: -rw-r--r-- 2,268 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
=====================
Developer Usage Guide
=====================

This guide explains how developers can use the moz-cached-ohttp protocol in Firefox code.

Basic Usage
===========

The moz-cached-ohttp protocol is designed to be used like any other resource loading mechanism in Firefox,
with the key differences being that it provides privacy-preserving OHTTP-based loading with automatic caching,
and cannot be used for regular content, so only privileged contexts can use the scheme.

Creating Resource Requests
==========================

To load a resource via the moz-cached-ohttp protocol, construct a URL in the following format:

.. code-block:: javascript

   const targetImageURL = "https://example.com/image.jpg";
   const encodedURL = encodeURIComponent(targetImageURL);
   const ohttpImageURL = `moz-cached-ohttp://newtab-image/?url=${encodedURL}`;

**Important**: The host must be ``newtab-image`` - other hosts are not currently supported and will result in an error.

.. note::

   Target URLs must use the HTTPS protocol. HTTP URLs will be rejected.

Using with Image Elements
-------------------------

The protocol can be used directly in HTML image elements within privileged contexts.

.. code-block:: html

   <img src="moz-cached-ohttp://newtab-image/?url=https%3A%2F%2Fexample.com%2Fimage.jpg" />

Using with Fetch API
---------------------

In privileged contexts, you can use the Fetch API:

.. code-block:: javascript

   try {
     const response = await fetch(ohttpImageURL);
     if (response.ok) {
       const blob = await response.blob();
       // Use the image blob
     }
   } catch (error) {
     console.error("Failed to load image:", error);
   }

Performance Best Practices
===========================

Cache Utilization
------------------

The protocol automatically handles caching, but you can optimize usage:

* **Consistent URLs**: Use the same encoded URL format for the same target resource
* **Have the server provide appropriate cache lifetimes**: The longer the lifetime, the less we may need to refetch the resource on the same client.
* **Respect cache headers**: Don't bypass cache unnecessarily with cache-busting parameters
* **Monitor cache hits**: In development, verify that repeated requests hit the cache