Inženirski odbor IETF (Internet Engineering Task Force), koji se bavi razvojem protokola i arhitekture interneta, dao je HTTP metodu QUERY status „Predloženog standarda“ i objavio povezanu specifikaciju RFC 10008. Metoda QUERY po načinu slanja podataka na server ponavlja metodu POST, ali se razlikuje od nje po tome što nije usmerena na upis podataka i promenu stanja, već na formiranje zahteva za čitanje.
Po rešenim zadacima, nova metoda je slična GET i omogućava slanje zahteva koji se mogu ponoviti ili ponovo pokrenuti bez promena stanja na serveru. Kao i u metodi POST, parametri zahteva u QUERY se prenose ne u URI, već u telu zahteva. Ovaj pristup omogućava prenos velike količine parametara u zahtevu, nadmašujući limit na veličinu parametara u metodi GET (8000 bajtova).
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
Parametri poslati putem metode QUERY se ne reflektuju u logovima strežnikov, što s jedne strane otežava analizu zahteva i dijagnostiku problema, ali s druge strane omogućava skrivanje poverljivih podataka iz logova proxy servera.
Među oblastima primene metode QUERY pominje se slanje zahteva ka Web API-ju, koji vraćaju rezultate u formatu JSON ili XML, ili backendovima koji generišu sadržaj. Za određivanje mogućnosti korišćenja nove metode prilikom obraćanja strežniku predlaže se korišćenje metode OPTIONS, a za određivanje podržanih formata metoda HEAD:
> OPTIONS /contacts HTTP/1.1
> Host: example.org
HTTP/1.1 200 OK
Allow: GET, QUERY, OPTIONS, HEAD
U metodi QUERY predviđena je podrška za keširanje — proxy serveri ili obrada mogu sačuvati rezultat izvršavanja zahteva, dodeliti mu URI za naknadno obraćanje putem metode GET i vratiti informacije o izdavanju keširane verzije putem zaglavlja „Last-Modified“. Za proveru postojanja izmena od prošlog zahteva može se koristiti zaglavlje „If-Modified-Since“. Za navođenje alternativnih opcija izvršavanja zahteva, u odgovoru se mogu navoditi zaglavlja „Content-Location“ i „Location“, čija je razlika u tome što prvo prenosi link za dobijanje rezultata ranije izvršenog zahteva, dok je drugo namenjeno ponavljanju zahteva sa istim parametrima.
> QUERY /contacts HTTP/1.1
> Host: example.org
> Content-Type: application/x-www-form-urlencoded
> Sprejmi: application/json
> select=surname,givenname,email&limit=10&match="email=*@example.*"
HTTP/1.1 200 OK
Vsebina-Tip: application/json
Vsebina-Lokacija: /stiki/hranjeni-rezultati/17
Lokacija: /stiki/hranjeni-poizvedbe/42
Zadnje-spremenjeno: sob, 25 avg 2012 23:34:45 GMT
Datum: ned, 17 nov 2024, 16:10:24 GMT
> GET /stiki/hranjeni-rezultati/17 HTTP/1.1
> Host: example.org
> Sprejmi: application/json
Poleg tipa «application/x-www-form-urlencoded» za prenos parametrov v poizvedbah QUERY se lahko neposredno uporabljajo tudi razširjeni formati, kot so JSONPath (application/jsonpath), XSLT (application/xslt+xml) in SQL (application/sql). Podprti formati se vrnejo serverom v glavi Accept-Query.
> HEAD /stiki HTTP/1.1
> Host: example.org
HTTP/1.1 200 OK
Vsebina-Tip: application/xhtml
Accept-Query: application/x-www-form-urlencoded, application/jsonpath, application/sql
> QUERY /errata.json HTTP/1.1
> Host: example.org
> Vsebina-Tip: application/jsonpath
> Sprejmi: application/json
>
> $..[
> ?@.errata_status_code==»Zavrženo»
> && @.submit_date>»2024″
> ]
> [«doc-id»]
Izvor: opennet.ru
