Das Engineering Committee IETF (Internet Engineering Task Force), das sich mit der Entwicklung von Protokollen und der Architektur des Internets befasst, hat der HTTP-Methode QUERY den Status „Entwurf-Standard“ verliehen und die zugehörige Spezifikation RFC 10008 veröffentlicht. Die Methode QUERY sendet Daten an den Server ähnlich wie die Methode POST, unterscheidet sich jedoch darin, dass sie sich nicht auf das Schreiben von Daten und die Änderung von Zuständen konzentriert, sondern auf das Erstellen von Leseanfragen.
In Bezug auf die behandelten Aufgaben ähnelt die neue Methode GET und ermöglicht das Senden von Anfragen, die ohne Änderungen am Serverzustand wiederholt oder neu gestartet werden können. Wie bei der Methode POST werden die Anfragedaten in QUERY nicht in der URI, sondern im Anfragekörper übermittelt. Dieser Ansatz ermöglicht die Übertragung einer großen Anzahl von Parametern in der Anfrage, die das Limit der Parametergröße bei der GET-Methode (8000 Byte) überschreiten.
GET /feed?q=foo&limit=10&sort=-published HTTP/1.1
Host: example.org
QUERY /feed HTTP/1.1
Host: example.org
Content-Type: application/x-www-form-urlencoded
q=foo&limit=10&sort=-published
Die über die QUERY-Methode gesendeten Parameter werden nicht in den Logs aufgezeichnet Server, was einerseits die Analyse von Anfragen und die Diagnose von Problemen erschwert, andererseits jedoch die Möglichkeit bietet, vertrauliche Daten aus den Logs der Proxy-Server zu verbergen.
Zu den Anwendungsbereichen der QUERY-Methode gehört das Senden von Anfragen an Web-APIs, die Ergebnisse im JSON- oder XML-Format ausgeben, oder an Backends, die Inhalte generieren. Um die Möglichkeit der Nutzung der neuen Methode bei Anfragen an zu einem Server wird empfohlen, die OPTIONS-Methode zu verwenden, und zur Bestimmung der unterstützten Formate die HEAD-Methode:
> OPTIONS /contacts HTTP/1.1
> Host: example.org
HTTP/1.1 200 OK
Allow: GET, QUERY, OPTIONS, HEAD
Die QUERY-Methode unterstützt Caching — Proxy-Server oder Handler können das Ergebnis der Anfrage speichern, ihm eine URI für spätere Anfragen über die GET-Methode zuweisen und Informationen zur Ausgabe der zwischengespeicherten Version über den Header „Last-Modified“ zurückgeben. Zur Überprüfung auf Änderungen seit der letzten Anfrage kann der Header „If-Modified-Since“ verwendet werden. Zur Angabe alternativer Ausführungsoptionen einer Anfrage können die Header „Content-Location“ und „Location“ angegeben werden, deren Unterschiede darin liegen, dass der erste einen Link zum Abrufen des Ergebnisses der zuvor ausgeführten Anfrage überträgt, während der zweite für die Wiederholung der Anfrage mit denselben Parametern bestimmt ist.
> QUERY /contacts HTTP/1.1
> Host: example.org
> Content-Type: application/x-www-form-urlencoded
> Akzeptieren: application/json
> select=surname,givenname,email&limit=10&match="email=*@example.*"
HTTP/1.1 200 OK
Content-Type: application/json
Content-Location: /contacts/stored-results/17
Location: /contacts/stored-queries/42
Last-Modified: Sat, 25 Aug 2012 23:34:45 GMT
Datum: Sun, 17 Nov 2024, 16:10:24 GMT
> GET /contacts/stored-results/17 HTTP/1.1
> Host: example.org
> Akzeptieren: application/json
Neben dem Typ «application/x-www-form-urlencoded» können zur Übertragung von Parametern in QUERY-Anfragen auch direkt erweiterte Formate wie JSONPath (application/jsonpath), XSLT (application/xslt+xml) und SQL (application/sql) verwendet werden. Unterstützte Formate werden Server im Accept-Query-Header zurückgegeben.
> HEAD /contacts HTTP/1.1
> Host: example.org
HTTP/1.1 200 OK
Content-Type: application/xhtml
Accept-Query: application/x-www-form-urlencoded, application/jsonpath, application/sql
> QUERY /errata.json HTTP/1.1
> Host: example.org
> Content-Type: application/jsonpath
> Akzeptieren: application/json
>
> $..[
> ?@.errata_status_code==»Rejected»
> && @.submit_date>»2024″
> ]
> [«doc-id»]
Quelle: opennet.ru
