{"id":36301,"date":"2026-07-29T13:35:07","date_gmt":"2026-07-29T11:35:07","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=36301"},"modified":"2026-07-29T13:35:09","modified_gmt":"2026-07-29T11:35:09","slug":"http-query-il-metodo-che-mancava-tra-get-e-post","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/","title":{"rendered":"HTTP QUERY: il metodo che mancava tra GET e POST"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Per quasi trent&#8217;anni il Web ha convissuto con un paradosso semantico che chiunque sviluppi per il backend conosce bene: come si esegue un&#8217;interrogazione complessa, voluminosa o contenente dati sensibili, se l&#8217;unico metodo &#8220;sicuro&#8221; a disposizione non prevede un corpo della richiesta?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pensiamo a quando dobbiamo inviare una query di ricerca strutturata con filtri annidati, ordinamenti e paginazioni multidimensionali. O magari una query SQL, un&#8217;espressione JSONPath o un documento GraphQL.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il pensiero del programmatore ingenuo \u00e8: aggiungo un parametro &#8220;q&#8221; all&#8217;URI e lo invio con GET, cosa sar\u00e0 mai.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Poi col tempo i parametri diventano 10, 100, 1000 e il programma implode. Questo succede perch\u00e9 il proxy che attraversa il firewall, memorizza i dati su Redis e fa bilanciamento del carico ha un limite di 2048 caratteri per l&#8217;URI. Oppure succede perch\u00e9 il firewall registra in chiaro l&#8217;URI e lo invia a un SIEM, esponendo dati sensibili come filtri di ricerca o credenziali.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Infilare tutto questo in un URI con il classico metodo GET ci espone a limiti fisici di trasporto e a seri rischi di sicurezza.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cosa fa invece chi vuole un minimo di sicurezza? Usa solo richieste POST: tutto rimane celato nel corpo della richiesta e non importa se distruggiamo la semantica, impediamo il caching o portiamo ai suicidio il nostro professore di sistemi, l&#8217;importante \u00e8 che la sicurezza sia salva.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ho lavorato con un progetto alla cui base c&#8217;\u00e8 questa logica: rozza, ma efficace.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;RFC 10008, pubblicato dall&#8217;IETF nel giugno 2026 e classificato come Proposed Standard, risolve finalmente questo dilemma introducendo il metodo QUERY. Proviamo a capire se ne vale la pena o se \u00e8 arrivato troppo tardi sulle nostre scrivanie. Una cosa infatti \u00e8 lo standard, un&#8217;altra \u00e8 la sua adozione, per la quale ci vorranno anni. Si tratta di aggiornare linguaggi, framework, librerie, proxy, bilanciatori, CDN, WAF e browser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questo nuovo verbo combina la garanzia semantica di sicurezza e idempotenza (tipiche di GET) con la capacit\u00e0 strutturale di trasportare un payload esteso nel corpo della richiesta (tipica di POST).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In questo articolo esploreremo la genesi del metodo QUERY, come funziona sotto il cofano, le sue implicazioni su caching e sicurezza, e come possiamo implementarlo oggi nei nostri backend (o almeno in futuro, quando l&#8217;ecosistema smetter\u00e0 di rifiutare la richiesta con un desolante HTTP\/1.0 405 Method Not Allowed).<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">QUERY trasporta l'interrogazione nel corpo della richiesta, superando i limiti di GET, ma con una semantica di sicurezza che POST non pu\u00f2 garantire.<\/code><\/span><\/pre>\n\n\n<h2 id=\"h-la-genesi-di-uno-standard-auth48-e-il-ruolo-dell-ietf\" class=\"wp-block-heading\">La genesi di uno standard: AUTH48 e il ruolo dell&#8217;IETF<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il metodo QUERY non \u00e8 nato dall&#8217;oggi al domani. \u00c8 il frutto del lavoro del gruppo HTTPbis dell&#8217;IETF, redatto da nomi noti dell&#8217;ingegneria dei protocolli come Julian Reschke (greenbytes), James M. Snell (Cloudflare) e Mike Bishop (Akamai).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un dettaglio interessante riguarda la fase finale di revisione dello standard, nota come &#8220;AUTH48&#8221;. Per la prima volta, l&#8217;RFC Production Center (RPC) ha utilizzato un progetto pilota basato su repository GitHub anzich\u00e9 sui tradizionali e lenti flussi di email (https:\/\/github.com\/rfc-editor-drafts\/FinalReview-rfc10008).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questo ha permesso una tracciabilit\u00e0 granulare delle modifiche redazionali, accelerando il rilascio di uno standard che promette di cambiare le regole del gioco.<\/p>\n\n\n\n<h2 id=\"h-il-problema-i-limiti-fisici-e-semantici-di-get-e-post\" class=\"wp-block-heading\">Il problema: i limiti fisici e semantici di GET e POST<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per apprezzare il valore di QUERY, dobbiamo guardare da vicino le limitazioni che ci hanno tormentato per decenni.<\/p>\n\n\n\n<h2 id=\"h-i-limiti-di-get-tra-uri-troppo-lunghi-e-log-in-chiaro\" class=\"wp-block-heading\">I limiti di GET: tra URI troppo lunghi e log in chiaro<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Con GET la query vive interamente nell&#8217;URI. Anche se l&#8217;RFC 9110 raccomanda che l&#8217;infrastruttura supporti URI di almeno 8000 ottetti, nella realt\u00e0 ci scontriamo con firewall, load balancer e CDN non coordinati che applicano limiti inferiori e variabili. Chi lavora in ambito enterprise sa bene che 2048 caratteri \u00e8 un limite comune, mentre alcuni proxy pi\u00f9 vecchi si fermano a 1024.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il superamento di questi limiti genera errori come &#8220;414 URI Too Long&#8221;, sempre difficili da diagnosticare, soprattutto quando il problema si manifesta solo in ambienti di produzione con traffico reale.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"572\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-2-1024x572.jpg\" alt=\"\" class=\"wp-image-36305\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-2-1024x572.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-2-300x167.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-2-768x429.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-2.jpg 1376w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">C&#8217;\u00e8 poi un problema critico di privacy: gli URI vengono registrati in chiaro nei log dei server. Una semplice ricerca tramite grep pu\u00f2 estrarre una grande quantit\u00e0 di dati sensibili con lo sforzo minimo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ricordo ancora quando, durante una delle mie prime analisi di sicurezza dei log per un grande operatore nazionale di telecomunicazioni, saltai letteralmente sulla sedia: guardandoli, mi resi conto che tutte le login di un certo applicativo avvenivano in GET anzich\u00e9 in POST. Le password di migliaia di utenti erano l\u00ec, scritte in chiaro nei file di testo del server web.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oltre a questo, anche se il fenomeno \u00e8 molto pi\u00f9 mitigato rispetto al passato, gli header &#8220;Referer&#8221; verso siti terzi possono trasportare dati che dovevano rimanere segregati nel server di origine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per questi motivi GET ha un peccato originale: non \u00e8 adatto a trasportare dati sensibili, eppure \u00e8 l&#8217;unico metodo sicuro e idempotente disponibile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Infine, memorizzare in cache queste richieste \u00e8 inefficiente. Qualsiasi variazione sintattica nell&#8217;ordine dei parametri o nella codifica dei caratteri invalida la cache, trasformando query semanticamente identiche in risorse distinte.<\/p>\n\n\n\n<h2 id=\"h-il-ripiego-su-post-la-perdita-del-contratto-semantico\" class=\"wp-block-heading\">Il ripiego su POST: la perdita del contratto semantico<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per aggirare i limiti di GET, la prassi comune \u00e8 stata quella di abusare di POST, spostando la query nel body: un approccio semplice, ma con conseguenze semantiche significative.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In questo modo non abbiamo pi\u00f9 problemi di spazio nell&#8217;URI e i log rimangono puliti (\u00e8 vero che si pu\u00f2 abilitare il logging del body, ma di default non \u00e8 attivo), ma il meccanismo rompe le garanzie del protocollo. Il metodo POST non \u00e8 n\u00e9 sicuro n\u00e9 idempotente per definizione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Di conseguenza, gli intermediari coinvolti nel trasporto di una richiesta POST, non sapendo se stia leggendo dati o modificando un database, evitano di reinviare i dati (come avviene con i browser) o di effettuare il caching (come avviene con le CDN).<\/p>\n\n\n\n<h2 id=\"h-i-precursori-webdav-e-perche-evitare-search-o-report\" class=\"wp-block-heading\">I precursori WebDAV e perch\u00e9 evitare SEARCH o REPORT<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Chi ha pi\u00f9 esperienza o qualche capello grigio ricorder\u00e0 sicuramente i tentativi fatti con WebDAV e metodi come &#8220;SEARCH&#8221; o &#8220;PROPFIND&#8221;. C&#8217;\u00e8 ancora chi pensa che WebDAV sia una soluzione perfetta, ma forse dovrebbe ricredersi dopo questa specifica e su come abbia volutamente ignorato i metodi WebDAV per crearne uno completamente nuovo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si \u00e8 deciso per\u00f2 di non riciclare quei metodi, che nascevano legati a doppio filo con il Content-Type &#8220;application\/xml&#8221;, ma di ripartire da zero.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">QUERY nasce cos\u00ec agnostico, non legato a un formato specifico, in modo che chi lo utilizza possa gestire in autonomia il proprio &#8220;Content-Type&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Stiamo quindi prendendo le cose positive di GET: sicurezza, idempotenza e caching, e vi si aggiunge il corpo della richiesta POST.<\/p>\n\n\n\n<h2 id=\"h-negoziazione-del-contenuto-e-codici-di-errore\" class=\"wp-block-heading\">Negoziazione del contenuto e codici di errore<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ragionando con il &#8220;Content-Type&#8221; iniziano ad arrivare i primi vincoli: se un client chiede un formato &#8220;application\/xml&#8221; e il server ha un contenuto diverso, la richiesta viene rigettata. Lo stesso avviene se il client non indica in modo esplicito questo dato.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo standard definisce in modo rigoroso questo passaggio all&#8217;interno della sezione &#8220;2.1 Media Types and Content Negotiation&#8221;:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>400 Bad Request: se il media type \u00e8 assente o malformato.<\/li>\n\n\n\n<li>415 Unsupported Media Type: se il formato di query non \u00e8 supportato dall&#8217;endpoint.<\/li>\n\n\n\n<li>406 Not Acceptable: se il formato richiesto in &#8220;Accept&#8221; non \u00e8 disponibile.<\/li>\n\n\n\n<li>422 Unprocessable Content: se la query \u00e8 sintatticamente valida ma logicamente non elaborabile (es. fa riferimento a una tabella o a un campo inesistente).<\/li>\n<\/ul>\n\n\n\n<h2 id=\"h-discovery-e-l-header-accept-query\" class=\"wp-block-heading\">Discovery e l&#8217;header Accept-Query<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Come fa un client a sapere quali formati di query sono accettati da un endpoint? L&#8217;RFC 10008 introduce l&#8217;header di risposta &#8220;Accept-Query&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"572\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-3-1024x572.jpg\" alt=\"\" class=\"wp-image-36306\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-3-1024x572.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-3-300x167.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-3-768x429.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-3.jpg 1376w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Questo header adotta le specifiche degli &#8220;Structured Fields&#8221; (RFC 9651). Essendo una lista formattata di token, permette ai client di fare il parsing in modo standard, senza regex complesse:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Accept-Query: <span class=\"hljs-string\">\"application\/jsonpath\"<\/span>, <span class=\"hljs-string\">\"application\/sql\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Un client pu\u00f2 scoprire le capacit\u00e0 del server in due modi:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Preventivo: invia una richiesta &#8220;OPTIONS&#8221; o &#8220;HEAD&#8221; e legge gli header &#8220;Allow&#8221; (che include QUERY) e &#8220;Accept-Query&#8221;.<\/li>\n\n\n\n<li>Aggressivo: invia direttamente una richiesta &#8220;QUERY&#8221;. Se il server non supporta quel formato, risponde con &#8220;415 Unsupported Media Type&#8221; e include &#8220;Accept-Query&#8221; per indicare i formati ammessi.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Chiaramente se c&#8217;\u00e8 la possibilit\u00e0 di concordare il formato l&#8217;approccio \u00e8 migliore perch\u00e9 evita round-trip aggiuntivi, ma non \u00e8 sempre possibile.<\/p>\n\n\n\n<h2 id=\"h-il-concetto-di-risorsa-equivalente\" class=\"wp-block-heading\">Il concetto di &#8220;risorsa equivalente&#8221;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per rispettare il principio del Web secondo cui ogni risorsa deve avere un URI, l&#8217;RFC introduce la &#8220;risorsa equivalente&#8221;: una risorsa concettuale (accessibile in GET) che rappresenta il risultato di una specifica richiesta QUERY pi\u00f9 i suoi metadati.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il server pu\u00f2 materializzare questa risorsa fornendo due header distinti nella risposta:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Location: punta alla query viva e ripetibile. Il client pu\u00f2 fare una &#8220;GET&#8221; a questo URI per ripetere l&#8217;interrogazione e ottenere dati aggiornati. Questo URI pu\u00f2 essere temporaneo: se scade, il client torna semplicemente a inviare la richiesta &#8220;QUERY&#8221; completa.<\/li>\n\n\n\n<li>Content-Location: identifica uno snapshot statico e storicizzato dei risultati in quel preciso momento.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"h-gestione-dei-redirect-e-richieste-condizionali\" class=\"wp-block-heading\">Gestione dei redirect e richieste condizionali<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A differenza di POST, dove i redirect &#8220;301&#8221; o &#8220;302&#8221; portavano spesso i browser a trasformare la richiesta in una &#8220;GET&#8221; (perdendo il body), con QUERY il client deve mantenere lo stesso metodo e body verso il nuovo URI per i codici &#8220;301&#8221;, &#8220;302&#8221;, &#8220;307&#8221; e &#8220;308&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Non si tratta di un errore: il client deve essere consapevole che la risorsa \u00e8 stata spostata e che la query va ripetuta nello stesso formato.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Solo il codice &#8220;303 See Other&#8221; impone il passaggio a una GET. Questo \u00e8 utile per le query asincrone molto onerose: il server risponde subito con &#8220;303&#8221; e un header &#8220;Location&#8221;, dicendo al client di recuperare il risultato pronto tramite una &#8220;GET&#8221; successiva.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per le richieste condizionali, il client pu\u00f2 inviare intestazioni come &#8220;If-Modified-Since&#8221; basandosi sui timestamp ricevuti in precedenza. Se i dati sottostanti non sono cambiati, il server risponde con un leggero &#8220;304 Not Modified&#8221;, risparmiando banda preziosa.<\/p>\n\n\n\n<h2 id=\"h-ingegneria-dell-edge-network-il-caching-basato-sul-corpo\" class=\"wp-block-heading\">Ingegneria dell&#8217;edge network: il caching basato sul corpo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La parte pi\u00f9 sfidante di QUERY \u00e8 sicuramente la gestione della cache. Per i reverse proxy o le CDN attuali, abituate a fare cache basandosi solo sulla parte di intestazione, si tratta di introdurre dei meccanismi in grado di tener conto anche del corpo della richiesta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questo significa che il sistema di cache deve calcolare un hash del corpo della richiesta per identificare le chiamate ripetute. Tale operazione, a seconda della dimensione del payload, pu\u00f2 introdurre una latenza proporzionale ai dati inviati.<\/p>\n\n\n\n<h2 id=\"h-la-normalizzazione\" class=\"wp-block-heading\">La normalizzazione<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Visti i problemi relativi all&#8217;ordine dei parametri e all&#8217;inefficienza della cache, l&#8217;RFC specifica:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Per migliorare l'efficienza della cache, le cache POSSONO rimuovere prima le differenze semanticamente insignificanti dal contenuto della richiesta e dai metadati correlati<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Questo \u00e8 un aspetto importante per migliorare l&#8217;efficienza della cache, ma introduce un rischio: se il parser del proxy e quello del server di origine normalizzano i dati in modo differente, si rischia il fenomeno dei &#8220;Parser Differentials&#8221;: la cache potrebbe servire un falso positivo (dati di una query per un&#8217;altra).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nel caso in cui ci sia una catena di processi intermedi che rischia di portare a questa deriva, l&#8217;intestazione prevista \u00e8:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Cache-Control<\/span>: no-transform<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">A essere onesti, l&#8217;header <code>no-transform<\/code> rappresenta la paura viscerale di chi ha disegnato questa specifica. Probabilmente ha passato le notti insonni a fare il debug di una cache sbagliata nei modi pi\u00f9 subdoli possibili e alla fine si \u00e8 arreso, introducendo un parametro di non alterabilit\u00e0 proprio all&#8217;interno di una specifica che teoricamente ne dichiarava la possibilit\u00e0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questo header finir\u00e0 per essere adottato in molti scenari reali proprio per evitare qualsiasi disallineamento imprevedibile tra parser diversi.<\/p>\n\n\n\n<h2 id=\"h-sicurezza-privacy-e-preflight-cors\" class=\"wp-block-heading\">Sicurezza, privacy e preflight CORS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fino a qui sembrano tutte cose bellissime, ma l&#8217;introduzione di un nuovo metodo HTTP ha delle implicazioni importanti sulla sicurezza e sulla privacy.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>WAF Blind Spots (Punti Ciechi): molti Web Application Firewall tradizionali analizzano il body delle richieste solo per metodi non sicuri (POST, PUT, PATCH). Vedendo un metodo &#8220;safe&#8221; come QUERY, potrebbero saltare l&#8217;ispezione profonda, consentendo a payload nocivi (SQL Injection, XSS) di raggiungere il backend. I team di sicurezza devono aggiornare i WAF e impostare regole per monitorare attentamente il traffico QUERY.<\/li>\n\n\n\n<li>Controlli anti-CSRF: se gli endpoint QUERY vengono implementati male e producono effetti collaterali sul database (per esempio usati come fossero delle POST), i middleware anti-CSRF potrebbero ignorarli ritenendoli sicuri, esponendo l&#8217;applicazione a vulnerabilit\u00e0.<\/li>\n\n\n\n<li>CORS Preflight: QUERY non \u00e8 un metodo &#8220;safelisted&#8221; nelle specifiche Fetch di WHATWG. Le richieste cross-origin richiederanno sempre una richiesta di preflight &#8220;OPTIONS&#8221;, raddoppiando il round-trip di rete. \u00c8 fondamentale configurare opportunamente l&#8217;header &#8220;Access-Control-Max-Age&#8221; per memorizzare in cache il preflight ed evitare colli di bottiglia prestazionali.<\/li>\n\n\n\n<li>Vantaggi per la privacy: spostando i parametri sensibili dall&#8217;URI al corpo opaco della richiesta, QUERY previene fughe di dati nei log dei server e nelle cronologie dei browser, allineandosi perfettamente al principio di minimizzazione dei dati del GDPR.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"h-la-svolta-per-graphql-e-headless-commerce\" class=\"wp-block-heading\">La svolta per GraphQL e headless commerce<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GraphQL ha vissuto per anni un dilemma di caching. Essendo le sue query troppo lunghe per GET, sono state storicamente inviate via POST, disabilitando le cache edge. Gli ingegneri hanno dovuto inventare soluzioni complesse come le query persistenti per ripristinare il caching con GET.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"571\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-it-infografica-1024x571.png\" alt=\"\" class=\"wp-image-36307\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-it-infografica-1024x571.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-it-infografica-300x167.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-it-infografica-768x428.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-it-infografica.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Con QUERY, i client GraphQL possono inviare query complete specificando &#8220;application\/graphql&#8221;, aumentando le prestazioni e riducendo la complessit\u00e0 dell&#8217;applicazione.<\/p>\n\n\n\n<h2 id=\"h-supporto-nei-backend\" class=\"wp-block-heading\">Supporto nei backend<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Node.js: il parser C++ integrato nei recenti rami di Node (21.x e 22+) supporta nativamente QUERY. Framework come Fastify permettono il routing esplicito con il flag <code>{ hasBody: true }<\/code>.<\/li>\n\n\n\n<li>Go: il pacchetto &#8220;net\/http&#8221; gestisce i metodi come stringhe, e il router introdotto in Go 1.22 supporta gi\u00e0 il routing di QUERY out-of-the-box.<\/li>\n\n\n\n<li>OpenAPI 3.2+: supporta ufficialmente la definizione e la documentazione del metodo QUERY.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"h-e-i-browser\" class=\"wp-block-heading\">E i browser?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le discussioni presso il WHATWG (issue #12594) stanno definendo il supporto per <code>&lt;form method=\"query\"&gt;<\/code>. Quando questo verr\u00e0 implementato, potremo finalmente aggiornare i moduli di ricerca web dicendo addio all&#8217;odioso avviso di &#8220;conferma reinvio modulo&#8221; al refresh della pagina.<\/p>\n\n\n\n<h2 id=\"h-un-protocollo-finalmente-maturo\" class=\"wp-block-heading\">Un protocollo finalmente maturo?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il metodo QUERY non \u00e8 una semplice aggiunta sintattica. Risolve un&#8217;incongruenza strutturale che ci portiamo dietro dagli albori del web.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Restituendo dignit\u00e0 semantica alle letture complesse, ci permette di costruire API pi\u00f9 pulite, sicure ed efficienti, liberandoci dall&#8217;obbligo di barattare la scalabilit\u00e0 del caching con la privacy e lo spazio di trasporto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La transizione richieder\u00e0 tempo, soprattutto per l&#8217;adeguamento dei client web e dei sistemi di sicurezza di rete. Ma la strada \u00e8 tracciata: interrogare non \u00e8 modificare, e da oggi il protocollo HTTP lo sa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc10008\/\">RFC 10008 &#8211; The HTTP QUERY Method<\/a><br><a href=\"https:\/\/datatracker.ietf.org\/wg\/httpbis\/documents\/\">HTTPbis<\/a><br><a href=\"https:\/\/github.com\/whatwg\/html\/issues\/12594\">WHATWG<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Per quasi trent&#8217;anni il Web ha convissuto con un paradosso semantico che chiunque sviluppi per il backend conosce bene: come si esegue un&#8217;interrogazione complessa, voluminosa o contenente dati sensibili, se l&#8217;unico metodo &#8220;sicuro&#8221; a disposizione non prevede un corpo della richiesta? Pensiamo a quando dobbiamo inviare una query di ricerca strutturata con filtri annidati, ordinamenti&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/\">Read more<\/a><\/p>\n","protected":false},"author":246,"featured_media":36303,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10263],"tags":[],"collections":[],"class_list":["post-36301","post","type-post","status-publish","format-standard","has-post-thumbnail","category-backend-it","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v28.1) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>HTTP QUERY: il metodo che mancava tra GET e POST - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"Il metodo QUERY non \u00e8 una semplice aggiunta sintattica. Risolve un&#039;incongruenza strutturale che ci portiamo dietro dagli albori del web.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"HTTP QUERY: il metodo che mancava tra GET e POST\" \/>\n<meta property=\"og:description\" content=\"Il metodo QUERY non \u00e8 una semplice aggiunta sintattica. Risolve un&#039;incongruenza strutturale che ci portiamo dietro dagli albori del web.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-29T11:35:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-29T11:35:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1376\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matteo Baccan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matteo Baccan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/http-query-il-metodo-che-mancava-tra-get-e-post\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/http-query-il-metodo-che-mancava-tra-get-e-post\\\/\"},\"author\":{\"name\":\"Matteo Baccan\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/58743a83113a6ac22788ab19bea03ad1\"},\"headline\":\"HTTP QUERY: il metodo che mancava tra GET e POST\",\"datePublished\":\"2026-07-29T11:35:07+00:00\",\"dateModified\":\"2026-07-29T11:35:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/http-query-il-metodo-che-mancava-tra-get-e-post\\\/\"},\"wordCount\":2261,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/http-query-il-metodo-che-mancava-tra-get-e-post\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/25-httpquery-1.jpg\",\"articleSection\":[\"Backend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/http-query-il-metodo-che-mancava-tra-get-e-post\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/http-query-il-metodo-che-mancava-tra-get-e-post\\\/\",\"name\":\"HTTP QUERY: il metodo che mancava tra GET e POST - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/http-query-il-metodo-che-mancava-tra-get-e-post\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/http-query-il-metodo-che-mancava-tra-get-e-post\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/25-httpquery-1.jpg\",\"datePublished\":\"2026-07-29T11:35:07+00:00\",\"dateModified\":\"2026-07-29T11:35:09+00:00\",\"description\":\"Il metodo QUERY non \u00e8 una semplice aggiunta sintattica. Risolve un'incongruenza strutturale che ci portiamo dietro dagli albori del web.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/http-query-il-metodo-che-mancava-tra-get-e-post\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/http-query-il-metodo-che-mancava-tra-get-e-post\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/http-query-il-metodo-che-mancava-tra-get-e-post\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/25-httpquery-1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/25-httpquery-1.jpg\",\"width\":1376,\"height\":768},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/http-query-il-metodo-che-mancava-tra-get-e-post\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"HTTP QUERY: il metodo che mancava tra GET e POST\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Codemotion.Italy\\\/\",\"https:\\\/\\\/x.com\\\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/58743a83113a6ac22788ab19bea03ad1\",\"name\":\"Matteo Baccan\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/matteo-baccan-100x100.jpg\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/matteo-baccan-100x100.jpg\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/matteo-baccan-100x100.jpg\",\"caption\":\"Matteo Baccan\"},\"description\":\"Matteo Baccan is a professional software engineer and trainer with over 30 years of experience in the IT industry. He has worked for several companies and organizations, dealing with design, development, testing, and management of web and desktop applications, using various languages and technologies. He is also a passionate computer science educator, author of numerous articles, books, and online courses aimed at all levels of expertise. He runs a website and a YouTube channel where he shares video tutorials, interviews, reviews, and programming tips. Active in open-source communities, he regularly participates in programming events and competitions. He defines himself as a \\\"realistic dreamer\\\" who loves to experiment, innovate, and share his knowledge and passions, following the motto: \\\"Never stop learning, because life never stops teaching.\\\"\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/author\\\/matteo-baccan\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"HTTP QUERY: il metodo che mancava tra GET e POST - Codemotion Magazine","description":"Il metodo QUERY non \u00e8 una semplice aggiunta sintattica. Risolve un'incongruenza strutturale che ci portiamo dietro dagli albori del web.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/","og_locale":"en_US","og_type":"article","og_title":"HTTP QUERY: il metodo che mancava tra GET e POST","og_description":"Il metodo QUERY non \u00e8 una semplice aggiunta sintattica. Risolve un'incongruenza strutturale che ci portiamo dietro dagli albori del web.","og_url":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2026-07-29T11:35:07+00:00","article_modified_time":"2026-07-29T11:35:09+00:00","og_image":[{"width":1376,"height":768,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1.jpg","type":"image\/jpeg"}],"author":"Matteo Baccan","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Matteo Baccan","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/"},"author":{"name":"Matteo Baccan","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/58743a83113a6ac22788ab19bea03ad1"},"headline":"HTTP QUERY: il metodo che mancava tra GET e POST","datePublished":"2026-07-29T11:35:07+00:00","dateModified":"2026-07-29T11:35:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/"},"wordCount":2261,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1.jpg","articleSection":["Backend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/","url":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/","name":"HTTP QUERY: il metodo che mancava tra GET e POST - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1.jpg","datePublished":"2026-07-29T11:35:07+00:00","dateModified":"2026-07-29T11:35:09+00:00","description":"Il metodo QUERY non \u00e8 una semplice aggiunta sintattica. Risolve un'incongruenza strutturale che ci portiamo dietro dagli albori del web.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1.jpg","width":1376,"height":768},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/http-query-il-metodo-che-mancava-tra-get-e-post\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/"},{"@type":"ListItem","position":3,"name":"HTTP QUERY: il metodo che mancava tra GET e POST"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/58743a83113a6ac22788ab19bea03ad1","name":"Matteo Baccan","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/02\/matteo-baccan-100x100.jpg","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/02\/matteo-baccan-100x100.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/02\/matteo-baccan-100x100.jpg","caption":"Matteo Baccan"},"description":"Matteo Baccan is a professional software engineer and trainer with over 30 years of experience in the IT industry. He has worked for several companies and organizations, dealing with design, development, testing, and management of web and desktop applications, using various languages and technologies. He is also a passionate computer science educator, author of numerous articles, books, and online courses aimed at all levels of expertise. He runs a website and a YouTube channel where he shares video tutorials, interviews, reviews, and programming tips. Active in open-source communities, he regularly participates in programming events and competitions. He defines himself as a \"realistic dreamer\" who loves to experiment, innovate, and share his knowledge and passions, following the motto: \"Never stop learning, because life never stops teaching.\"","url":"https:\/\/www.codemotion.com\/magazine\/author\/matteo-baccan\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-600x600.jpg","author_info":{"display_name":"Matteo Baccan","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/matteo-baccan\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1.jpg",1376,768,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-300x167.jpg",300,167,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-768x429.jpg",768,429,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-1024x572.jpg",1024,572,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1.jpg",1376,768,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1.jpg",1376,768,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-100x100.jpg",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Matteo Baccan","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/matteo-baccan\/"},"uagb_comment_info":0,"uagb_excerpt":"Per quasi trent&#8217;anni il Web ha convissuto con un paradosso semantico che chiunque sviluppi per il backend conosce bene: come si esegue un&#8217;interrogazione complessa, voluminosa o contenente dati sensibili, se l&#8217;unico metodo &#8220;sicuro&#8221; a disposizione non prevede un corpo della richiesta? Pensiamo a quando dobbiamo inviare una query di ricerca strutturata con filtri annidati, ordinamenti&#8230;&hellip;","lang":"it","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/36301","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/246"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=36301"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/36301\/revisions"}],"predecessor-version":[{"id":36331,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/36301\/revisions\/36331"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/36303"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=36301"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=36301"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=36301"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=36301"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}