Anhang A. Statische Tabelle
Diese Tabelle wurde durch Analyse des tatsächlichen Internetverkehrs im Jahr 2018 generiert und enthält die häufigsten Header-Felder, nachdem einige nicht unterstützte und nicht standardisierte Werte herausgefiltert wurden. Aufgrund dieser Methodik fehlen einige der häufigsten Header-Felder in der statischen QPACK-Tabelle, wie unten erläutert.
Der "accept-encoding"-Header fehlt in der statischen Tabelle, da sein Wert wahrscheinlich für jeden Client eindeutig ist und der dynamische Tabellenspeicher besser genutzt wird, wenn der Encoder basierend auf dem Anwendungskontext auswählen kann, was indexiert werden soll.
Die folgenden Header-Felder waren im Korpus häufig, fehlen jedoch in der statischen Tabelle, da sie in HTTP/3 entropiekodiert sind und daher nicht mehr explizit übertragen werden: ":authority", ":method", ":path", ":scheme" und ":status".
Der "user-agent"-Header ist relativ häufig und ein guter Kandidat für die statische Tabelle. Sein Wert ist jedoch so vielfältig, dass er in der statischen Tabelle wenig Wert bieten würde, und wie bei "accept-encoding" wird der dynamische Tabellenspeicher besser genutzt, wenn der Encoder auswählen kann, was indexiert werden soll.
Der "content-length"-Header fehlt ebenfalls in dieser statischen Tabelle, da sein Wert normalerweise für jede Antwort eindeutig ist und er von der Aufnahme in die statische Tabelle wenig profitieren würde.
Die statische QPACK-Tabelle besteht aus einer vordefinierten Liste von 99 Feldzeilen, jede mit einem festen Index im Bereich 0-98.
| Index | Name | Wert |
|---|---|---|
| 0 | :authority | |
| 1 | :path | / |
| 2 | age | 0 |
| 3 | content-disposition | |
| 4 | content-length | 0 |
| 5 | cookie | |
| 6 | date | |
| 7 | etag | |
| 8 | if-modified-since | |
| 9 | if-none-match | |
| 10 | last-modified | |
| 11 | link | |
| 12 | location | |
| 13 | referer | |
| 14 | set-cookie | |
| 15 | :method | CONNECT |
| 16 | :method | DELETE |
| 17 | :method | GET |
| 18 | :method | HEAD |
| 19 | :method | OPTIONS |
| 20 | :method | POST |
| 21 | :method | PUT |
| 22 | :scheme | http |
| 23 | :scheme | https |
| 24 | :status | 103 |
| 25 | :status | 200 |
| 26 | :status | 304 |
| 27 | :status | 404 |
| 28 | :status | 503 |
| 29 | accept | */* |
| 30 | accept | application/dns-message |
| 31 | accept-encoding | gzip, deflate, br |
| 32 | accept-ranges | bytes |
| 33 | access-control-allow-headers | cache-control |
| 34 | access-control-allow-headers | content-type |
| 35 | access-control-allow-origin | * |
| 36 | cache-control | max-age=0 |
| 37 | cache-control | max-age=2592000 |
| 38 | cache-control | max-age=604800 |
| 39 | cache-control | no-cache |
| 40 | cache-control | no-store |
| 41 | cache-control | public, max-age=31536000 |
| 42 | content-encoding | br |
| 43 | content-encoding | gzip |
| 44 | content-type | application/dns-message |
| 45 | content-type | application/javascript |
| 46 | content-type | application/json |
| 47 | content-type | application/x-www-form-urlencoded |
| 48 | content-type | image/gif |
| 49 | content-type | image/jpeg |
| 50 | content-type | image/png |
| 51 | content-type | text/css |
| 52 | content-type | text/html; charset=utf-8 |
| 53 | content-type | text/plain |
| 54 | content-type | text/plain;charset=utf-8 |
| 55 | range | bytes=0- |
| 56 | strict-transport-security | max-age=31536000 |
| 57 | strict-transport-security | max-age=31536000; includesubdomains |
| 58 | strict-transport-security | max-age=31536000; includesubdomains; preload |
| 59 | vary | accept-encoding |
| 60 | vary | origin |
| 61 | x-content-type-options | nosniff |
| 62 | x-xss-protection | 1; mode=block |
| 63 | :status | 100 |
| 64 | :status | 204 |
| 65 | :status | 206 |
| 66 | :status | 302 |
| 67 | :status | 400 |
| 68 | :status | 403 |
| 69 | :status | 421 |
| 70 | :status | 425 |
| 71 | :status | 500 |
| 72 | accept-language | |
| 73 | access-control-allow-credentials | FALSE |
| 74 | access-control-allow-credentials | TRUE |
| 75 | access-control-allow-headers | * |
| 76 | access-control-allow-methods | get |
| 77 | access-control-allow-methods | get, post, options |
| 78 | access-control-allow-methods | options |
| 79 | access-control-expose-headers | content-length |
| 80 | access-control-request-headers | content-type |
| 81 | access-control-request-method | get |
| 82 | access-control-request-method | post |
| 83 | alt-svc | clear |
| 84 | authorization | |
| 85 | content-security-policy | script-src 'none'; object-src 'none'; base-uri 'none' |
| 86 | early-data | 1 |
| 87 | expect-ct | |
| 88 | forwarded | |
| 89 | if-range | |
| 90 | origin | |
| 91 | purpose | prefetch |
| 92 | server | |
| 93 | timing-allow-origin | * |
| 94 | upgrade-insecure-requests | 1 |
| 95 | user-agent | |
| 96 | x-forwarded-for | |
| 97 | x-frame-options | deny |
| 98 | x-frame-options | sameorigin |
Tabelle 4: Statische Tabelle
Alle Zeilenumbrüche, die in einem Feldnamen oder -wert erscheinen, sind auf Formatierung zurückzuführen.