Die HTTP-QUERY-Methode
QUERY ist eine vorgeschlagene HTTP-Methode, die eine echte Lücke schließt: Sie ist
sicher und idempotent wie GET, darf aber wie POST einen Request-Body
transportieren. Verstehen Sie sie als „ein GET, dem Sie eine Nutzlast mitgeben können“.
Daseinsberechtigung
Komplexe Abfragen erzwangen lange Zeit eine unschöne Entscheidung:
GETmit Query-String packt jeden Filter in die URL. URLs haben Längenbeschränkungen, landen im Klartext in Logs und sind für strukturierte oder verschachtelte Kriterien unhandlich.POSTmit Body transportiert die Nutzlast zwar problemlos, täuscht aber über die Absicht hinweg.POSTist weder sicher noch idempotent, daher müssen Caches, Crawler und Zwischeninstanzen annehmen, dass die Anfrage den Zustand ändert. Das tut sie nicht — Sie lesen ja nur.
QUERY löst den Widerspruch auf: Die Semantik sagt „dies ist ein Lesezugriff“, und der Body trägt die Kriterien.
Eigenschaften
| Eigenschaft | QUERY | GET | POST |
|---|---|---|---|
| Sicher | ✓ | ✓ | ✗ |
| Idempotent | ✓ | ✓ | ✗ |
| Request-Body | ✓ | ✗ | ✓ |
| Cachebar | ✓ | ✓ | bedingt |
So sieht eine Anfrage aus
QUERY /products HTTP/1.1
Host: shop.example
Content-Type: application/json
Accept: application/json
{ "category": "boots", "inStock": true }
Caching mit Content-Location
Weil QUERY sicher und idempotent ist, kann eine Antwort zwischengespeichert werden —
der Cache-Schlüssel darf jedoch nicht allein die URL sein, da der Body variiert. Der Server
benennt den kanonischen Ort des Ergebnisses mit einem Content-Location-Header:
HTTP/1.1 200 OK
Content-Location: /products?category=boots&inStock=true
Cache-Control: max-age=60
Ein Cache (oder der Client) kann diese Repräsentation anschließend für eine gleichwertige Anfrage wiederverwenden. Genau dieser Mechanismus hält einen Lesezugriff mit Body cachebar.
Ausprobieren
Gehen Sie zum Playground und senden Sie eine echte QUERY-Anfrage an den
Echo-Endpunkt dieser Website, um genau zu sehen, wie Methode, Header und Body am Server
ankommen.
QUERY ist in einem IETF Internet-Draft definiert und befindet sich noch in Entwicklung. Betrachten Sie die obigen Details als Arbeitszusammenfassung und prüfen Sie den verlinkten Draft für den maßgeblichen, aktuellen Text.