Przez szesnaście lat programiści, którzy musieli zadawać serwerowi złożone pytania, byli skazani na obejście problemu. Gdy payload wyszukiwania stawał się zbyt duży dla adresu URL lub gdy zagnieżdżone filtry i wrażliwe parametry nie mieściły się w ciągu zapytania (query string), jedyną praktyczną opcją był POST. Przenosił on bajty, ale kłamał co do intencji. POST sygnalizuje zmianę stanu. Używanie go do operacji typu read-only zmuszało całą ścieżkę sieciową — pamięci podręczne, proxy i przeglądarki — do traktowania niewinnego zapytania tak, jakby mogło ono zmienić bazę danych.

Ten kompromis w końcu dobiegł końca. W czerwcu 2026 roku IETF opublikowało RFC 10008, formalnie standaryzując metodę QUERY. Jest to pierwsza nowa metoda HTTP od czasu wprowadzenia PATCH w 2010 roku. QUERY istnieje specjalnie dla bezpiecznych, idempotentnych żądań, które wymagają przesłania body. Nie zmienia ona stanu serwera. Powtarzanie tego samego żądania daje ten sam wynik. Jest podatna na buforowanie (cacheable), co oznacza, że pośrednicy mogą przechowywać i ponownie wykorzystywać odpowiedź. I w przeciwieństwie do GET, pozwala na przesyłanie payloadu danych, podobnie jak POST.

Największymi zwycięzcami są zapytania GraphQL oraz złożone punkty końcowe (endpoints) wyszukiwania w REST. Nie musisz już upychać sześćdziesięciu parametrów zapytania w adresie URL ani ukrywać dokumentu filtra JSON w body żądania POST, którego pośrednicy odmówią buforowania. Semantyka jest teraz uczciwa.

Jednak RFC to tylko atrament na papierze. Między Twoją aplikacją a użytkownikami znajduje się gruba warstwa infrastruktury, z której większość nigdy nie słyszała o QUERY.

Problem buforowania nie został jeszcze rozwiązany

W przypadku żądania GET buforowanie jest proste. Kluczem cache'u jest URI. Dwaj użytkownicy uderzający pod ten sam adres URL otrzymają tę samą zapisaną odpowiedź, zakładając, że nagłówki na to pozwalają.

QUERY przełamuje ten model, ponieważ parametry żądania znajdują się w body. Aby cache mógł rozpoznać, że dwa żądania są identyczne, klucz cache'u musi uwzględniać zarówno URI, jak i zawartość body. To wymaganie wprowadza realne trudności operacyjne.

Po pierwsze, serwery brzegowe i sieci CDN muszą buforować całe body żądania, zanim będą mogły obliczyć hash. Wymaga to pamięci i czasu na węźle brzegowym. Po drugie, dwa logicznie identyczne zapytania mogą nie generować tych samych bajtów. Jeden klient może wysłać {"status":"active"}, podczas gdy inny wyśle {"status": "active"} z różną ilością spacji lub inną kolejnością kluczy. Chyba że warstwa buforowania parsuje, normalizuje i kanonizuje body — sortując klucze JSON, usuwając nieistotne formatowanie i obsługując różnice w kodowaniu — to samo pytanie za każdym razem będzie omijać cache.

Co najważniejsze, popularne sieci CDN nie partycjonują jeszcze cache'u według body żądania dla metody QUERY. Cloudflare, na przykład, w swojej obecnej formie nie traktuje body jako części klucza cache dla tej metody. Jeśli wdrożysz QUERY, zakładając, że "cacheable" oznacza "zbuforowane", możesz napotkać błędy kolizji, powszechne braki w pamięci podręcznej (cache misses) lub odpowiedzi, które wyciekają między niepowiązanymi żądaniami. Dopóki Twój dostawca nie ogłosi wyraźnego wsparcia, zakładaj, że QUERY nie jest w praktyce podatne na buforowanie w środowisku produkcyjnym.

Twoje narzędzia prawdopodobnie zablokują je jako pierwsze

Każde żądanie HTTP przechodzi przez stos urządzeń pośredniczących (middleboxes), a większość z nich stosuje sztywne reguły dotyczące tego, które metody są dozwolone.

Zapory sieciowe aplikacji webowych (WAF) i bramy API (API gateways) często polegają na jawnych listach dopuszczonych (allowlists). Typowy zestaw reguł zezwala na GET, POST, PUT, DELETE i PATCH. Wszystko inne jest odrzucane lub zwraca błąd 405 Method Not Allowed. QUERY uderzy w te mury, zanim w ogóle dotrze do kodu Twojej aplikacji.

Silniki reguł bezpieczeństwa stanowią kolejną przeszkodę. Niektóre systemy wykrywania intruzów zakładają, że żądanie niosące body