Ingenjörskommittén IETF (Internet Engineering Task Force), som arbetar med utvecklingen av protokoll och arkitekturen för internet, gav HTTP-metoden QUERY status som "Föreslagen standard" och publicerade relaterad specifikation RFC 10008. Metod QUERY efterliknar POST nÀr det gÀller dataskickande till servern, men skiljer sig frÄn den i och med att den inte Àr inriktad pÄ att skriva data och Àndra tillstÄnd, utan att skapa förfrÄgningar för lÀsning.
NÀr det gÀller problemen som löses Àr den nya metoden nÀra relaterad till GET och tillÄter att skicka förfrÄgningar som kan upprepas eller startas om utan att Àndra tillstÄndet pÄ servern. Precis som i metoden POST överförs parametrarna i QUERY inte i URI, utan i förfrÄgningskroppen. Denna metod möjliggör överföring av en stor mÀngd parametrar i förfrÄgan som överskrider grÀnsen för parameterns storlek i GET-metoden (8000 byte).
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
Parametrar skickade via QUERY-metoden syns inte i loggarna servrar, vilket Ä ena sidan komplicerar analysen av förfrÄgningar och diagnostik av problem, men Ä andra sidan möjliggör att dölja konfidentiella uppgifter frÄn loggar pÄ proxyservrar.
Inom tillÀmpningsomrÄdena för QUERY-metoden nÀmns att skicka förfrÄgningar till Web API:er, som ger resultat i JSON- eller XML-format, eller backend-system som genererar innehÄll. För att bestÀmma möjligheten att anvÀnda den nya metoden vid anrop till servern föreslÄs att anvÀnda metoden OPTIONS, och för att faststÀlla stödja format, metoden HEAD:
> OPTIONS /contacts HTTP/1.1
> Host: example.org
HTTP/1.1 200 OK
Allow: GET, QUERY, OPTIONS, HEAD
Metoden QUERY stöder caching â proxyservrar eller handlare kan spara resultatet av en förfrĂ„gan, tilldela det en URI för framtida Ă„tkomst via metoden GET och returnera information om utslaget av den cachade versionen genom rubriken "Last-Modified". För att kontrollera om det har skett förĂ€ndringar sedan den senaste förfrĂ„gan kan rubriken "If-Modified-Since" anvĂ€ndas. Alternativa sĂ€tt att genomföra förfrĂ„gan kan anges i svaret med hjĂ€lp av rubrikerna "Content-Location" och "Location", dĂ€r skillnaden Ă€r att den första överför en lĂ€nk för att hĂ€mta resultatet av en tidigare genomförd förfrĂ„gan, medan den andra Ă€r avsedd för att upprepa förfrĂ„gan med samma parametrar.
> QUERY /contacts HTTP/1.1
> Host: example.org
> Content-Type: application/x-www-form-urlencoded
> Accept: 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
Date: Sun, 17 Nov 2024, 16:10:24 GMT
> GET /contacts/stored-results/17 HTTP/1.1
> Host: example.org
> Accept: application/json
Förutom typen "application/x-www-form-urlencoded" kan Àven avancerade format, sÄsom JSONPath (application/jsonpath), XSLT (application/xslt+xml) och SQL (application/sql), anvÀndas direkt för att överföra parametrar i QUERY-förfrÄgningar. De stödda formaten returneras servern i rubriken Accept-Query.
> 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
> Accept: application/json
>
> $..[
> ?@.errata_status_code=="Rejected"
> && @.submit_date>"2024"
> ]
> ["doc-id"]
KĂ€lla: opennet.ru
