{"id":36311,"date":"2026-09-15T15:09:17","date_gmt":"2026-09-15T13:09:17","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=36311"},"modified":"2026-09-15T15:13:04","modified_gmt":"2026-09-15T13:13:04","slug":"http-query-el-metodo-que-faltaba-entre-get-y-post","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/","title":{"rendered":"HTTP QUERY: el m\u00e9todo que faltaba entre GET y POST"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Durante casi treinta a\u00f1os, la Web ha convivido con una paradoja sem\u00e1ntica que cualquiera que desarrolle para el backend conoce bien: \u00bfc\u00f3mo se ejecuta una consulta compleja, voluminosa o que contiene datos sensibles, si el \u00fanico m\u00e9todo &#8220;seguro&#8221; disponible no permite un cuerpo de solicitud?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pensemos en cuando necesitamos enviar una consulta de b\u00fasqueda estructurada con filtros anidados, ordenaciones y paginaciones multidimensionales. O quiz\u00e1s una consulta SQL, una expresi\u00f3n JSONPath o un documento GraphQL.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El primer pensamiento de quien empieza a programar es: a\u00f1ado un par\u00e1metro &#8220;q&#8221; a la URI y lo env\u00edo con GET, total, qu\u00e9 puede pasar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Luego, con el tiempo, los par\u00e1metros pasan a ser 10, 100 o 1000, y la aplicaci\u00f3n explota. Esto sucede porque el proxy que cruza el firewall, almacena los datos en Redis y realiza el balanceo de carga tiene un l\u00edmite de 2048 caracteres para la URI. O bien ocurre porque el firewall registra la URI en texto plano y la env\u00eda a un SIEM, exponiendo datos sensibles como filtros de b\u00fasqueda o credenciales.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Meter todo esto en una URI con el m\u00e9todo cl\u00e1sico GET nos expone a l\u00edmites f\u00edsicos de transporte y a graves riesgos de seguridad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfQu\u00e9 hace en su lugar quien busca un m\u00ednimo de seguridad? Usa solo solicitudes POST: todo queda oculto en el cuerpo de la petici\u00f3n y no importa si destruimos la sem\u00e1ntica, impedimos el almacenamiento en cach\u00e9 o desesperamos a nuestro profesor de sistemas, lo importante es mantener los datos a salvo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">He trabajado en un proyecto cuya base segu\u00eda esta misma l\u00f3gica: rudimentaria, pero eficaz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La RFC 10008, publicada por la IETF en junio de 2026 y clasificada como Proposed Standard, resuelve finalmente este dilema introduciendo el m\u00e9todo QUERY. Intentemos comprender si vale la pena o si ha llegado demasiado tarde a nuestras mesas de trabajo. Una cosa es el est\u00e1ndar y otra muy distinta su adopci\u00f3n, para la cual har\u00e1n falta a\u00f1os. Se trata de actualizar lenguajes, frameworks, librer\u00edas, proxies, balanceadores, CDNs, WAFs y navegadores.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este nuevo verbo combina la garant\u00eda sem\u00e1ntica de seguridad e idempotencia (t\u00edpicas de GET) con la capacidad estructural de transportar un payload extendido en el cuerpo de la solicitud (t\u00edpica de POST).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En este art\u00edculo exploraremos la g\u00e9nesis del m\u00e9todo QUERY, c\u00f3mo funciona bajo el cap\u00f3, sus implicaciones en el almacenamiento en cach\u00e9 y la seguridad, y c\u00f3mo podemos implementarlo hoy en nuestros backends (o al menos en el futuro, cuando el ecosistema deje de rechazar la petici\u00f3n con un desolador HTTP\/1.0 405 Method Not Allowed).<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">QUERY transporta la consulta en el cuerpo de la solicitud, superando los l\u00edmites de GET, pero con una sem\u00e1ntica de seguridad que POST no puede garantizar.<\/code><\/span><\/pre>\n\n\n<h2 id=\"h-la-genesis-de-un-estandar-auth48-y-el-papel-del-ietf\" class=\"wp-block-heading\">La g\u00e9nesis de un est\u00e1ndar: AUTH48 y el papel del IETF<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El m\u00e9todo QUERY no naci\u00f3 de la noche a la ma\u00f1ana. Es el fruto del trabajo del grupo HTTPbis de la IETF, redactado por nombres reconocidos de la ingenier\u00eda de protocolos como Julian Reschke (greenbytes), James M. Snell (Cloudflare) y Mike Bishop (Akamai).<\/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-1-1024x572.jpg\" alt=\"\" class=\"wp-image-36303\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-1024x572.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-300x167.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1-768x429.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1.jpg 1376w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Un detalle interesante tiene que ver con la fase final de revisi\u00f3n del est\u00e1ndar, conocida como &#8220;AUTH48&#8221;. Por primera vez, el RFC Production Center (RPC) utiliz\u00f3 un proyecto piloto basado en repositorios de GitHub en lugar de los tradicionales y lentos flujos de correo electr\u00f3nico (https:\/\/github.com\/rfc-editor-drafts\/FinalReview-rfc10008).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto permiti\u00f3 una trazabilidad granular de los cambios de redacci\u00f3n, acelerando el lanzamiento de un est\u00e1ndar que promete cambiar las reglas del juego.<\/p>\n\n\n\n<h2 id=\"h-el-problema-los-limites-fisicos-y-semanticos-de-get-y-post\" class=\"wp-block-heading\">El problema: los l\u00edmites f\u00edsicos y sem\u00e1nticos de GET y POST<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para valorar la importancia de QUERY, debemos examinar de cerca las limitaciones que nos han acompa\u00f1ado durante d\u00e9cadas.<\/p>\n\n\n\n<h3 id=\"h-los-limites-de-get-entre-uris-demasiado-largos-y-registros-en-texto-plano\" class=\"wp-block-heading\">Los l\u00edmites de GET: entre URIs demasiado largos y registros en texto plano<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Con GET, la consulta vive por completo en la URI. Aunque la RFC 9110 recomienda que la infraestructura soporte URIs de al menos 8000 octetos, en la pr\u00e1ctica nos topamos con firewalls, balanceadores de carga y CDNs no coordinados que aplican l\u00edmites inferiores y variables. Quien trabaje en el \u00e1mbito enterprise sabe bien que 2048 caracteres es un l\u00edmite habitual, mientras que algunos proxies m\u00e1s antiguos se quedan en 1024.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Superar estos l\u00edmites genera errores como &#8220;414 URI Too Long&#8221;, siempre dif\u00edciles de diagnosticar, especialmente cuando el problema solo se manifiesta en entornos de producci\u00f3n con tr\u00e1fico real.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s, hay un problema cr\u00edtico de privacidad: las URIs se registran en texto plano en los logs de los servidores. Una simple b\u00fasqueda mediante grep puede extraer una enorme cantidad de datos sensibles con el m\u00ednimo esfuerzo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A\u00fan recuerdo cuando, durante una de mis primeras auditor\u00edas de seguridad de logs para un gran operador nacional de telecomunicaciones, salt\u00e9 de la silla: al analizarlos, me di cuenta de que todos los accesos de una determinada aplicaci\u00f3n se realizaban en GET en lugar de POST. Las contrase\u00f1as de miles de usuarios estaban all\u00ed, escritas en texto plano en los archivos de texto del servidor web.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aparte de esto, aunque el fen\u00f3meno est\u00e1 mucho m\u00e1s mitigado en comparaci\u00f3n con el pasado, las cabeceras &#8220;Referer&#8221; hacia sitios de terceros pueden arrastrar datos que deb\u00edan permanecer segregados en el servidor de origen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por estos motivos, GET carga con un pecado original: no es adecuado para transportar datos sensibles, a pesar de ser el \u00fanico m\u00e9todo seguro e idempotente disponible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por \u00faltimo, almacenar en cach\u00e9 estas peticiones es ineficiente. Cualquier variaci\u00f3n sint\u00e1ctica en el orden de los par\u00e1metros o en la codificaci\u00f3n de caracteres invalida la cach\u00e9, transformando consultas sem\u00e1nticamente id\u00e9nticas en recursos distintos.<\/p>\n\n\n\n<h3 id=\"h-el-recurso-a-post-la-perdida-del-contrato-semantico\" class=\"wp-block-heading\">El recurso a POST: la p\u00e9rdida del contrato sem\u00e1ntico<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para evitar los l\u00edmites de GET, la pr\u00e1ctica com\u00fan ha sido abusar de POST, desplazando la consulta al body: un enfoque sencillo, pero con consecuencias sem\u00e1nticas importantes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">De este modo ya no tenemos problemas de espacio en la URI y los logs permanecen limpios (es cierto que se puede habilitar el registro del body, pero no suele estar activo por defecto), pero este mecanismo rompe las garant\u00edas del protocolo. El m\u00e9todo POST no es seguro ni idempotente por definici\u00f3n.<\/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\">Como consecuencia, los intermediarios implicados en el transporte de una solicitud POST, al no saber si est\u00e1 leyendo datos o modificando una base de datos, evitan reenviar la informaci\u00f3n (como hacen los navegadores) o realizar el almacenamiento en cach\u00e9 (como hacen las CDNs).<\/p>\n\n\n\n<h2 id=\"h-los-precursores-webdav-y-por-que-evitar-search-o-report\" class=\"wp-block-heading\">Los precursores WebDAV y por qu\u00e9 evitar SEARCH o REPORT<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quienes tengan m\u00e1s experiencia o peinen alguna cana recordar\u00e1n sin duda los intentos realizados con WebDAV y m\u00e9todos como &#8220;SEARCH&#8221; o &#8220;PROPFIND&#8221;. Todav\u00eda hay quien piensa que WebDAV es una soluci\u00f3n perfecta, pero quiz\u00e1s deber\u00eda cambiar de opini\u00f3n tras conocer esta especificaci\u00f3n y ver c\u00f3mo ha omitido deliberadamente los m\u00e9todos de WebDAV para crear uno completamente nuevo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se decidi\u00f3, sin embargo, no reciclar esos m\u00e9todos, que nac\u00edan estrechamente vinculados al Content-Type &#8220;application\/xml&#8221;, y empezar desde cero.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">QUERY nace as\u00ed agn\u00f3stico, no asociado a un formato concreto, de manera que cada desarrollador pueda gestionar su propio &#8220;Content-Type&#8221; con total autonom\u00eda.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por lo tanto, estamos adoptando los aspectos positivos de GET: seguridad, idempotencia y almacenamiento en cach\u00e9, sum\u00e1ndole el cuerpo de solicitud de POST.<\/p>\n\n\n\n<h3 id=\"h-negociacion-de-contenido-y-codigos-de-error\" class=\"wp-block-heading\">Negociaci\u00f3n de contenido y c\u00f3digos de error<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Al razonar con el &#8220;Content-Type&#8221; comienzan a aparecer las primeras limitaciones: si un cliente solicita un formato &#8220;application\/xml&#8221; y el servidor ofrece un contenido distinto, la petici\u00f3n es rechazada. Lo mismo ocurre si el cliente no indica expl\u00edcitamente este par\u00e1metro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El est\u00e1ndar define de manera rigurosa este paso en la secci\u00f3n &#8220;2.1 Media Types and Content Negotiation&#8221;:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>400 Bad Request: si el tipo de medio est\u00e1 ausente o mal formado.<\/li>\n\n\n\n<li>415 Unsupported Media Type: si el formato de la consulta no es compatible con el endpoint.<\/li>\n\n\n\n<li>406 Not Acceptable: si el formato solicitado en &#8220;Accept&#8221; no est\u00e1 disponible.<\/li>\n\n\n\n<li>422 Unprocessable Content: si la consulta es sint\u00e1cticamente v\u00e1lida pero l\u00f3gicamente no procesable (por ejemplo, hace referencia a una tabla o campo inexistente).<\/li>\n<\/ul>\n\n\n\n<h2 id=\"h-discovery-y-la-cabecera-accept-query\" class=\"wp-block-heading\">Discovery y la cabecera Accept-Query<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfC\u00f3mo sabe un cliente qu\u00e9 formatos de consulta acepta un endpoint? La RFC 10008 introduce la cabecera de respuesta &#8220;Accept-Query&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta cabecera adopta las especificaciones de los &#8220;Structured Fields&#8221; (RFC 9651). Al ser una lista formateada de tokens, permite a los clientes realizar el parseo de manera est\u00e1ndar, sin necesidad de expresiones regulares complejas:<\/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 cliente puede descubrir las capacidades del servidor de dos maneras:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Preventiva: env\u00eda una petici\u00f3n &#8220;OPTIONS&#8221; o &#8220;HEAD&#8221; y lee las cabeceras &#8220;Allow&#8221; (que incluye QUERY) y &#8220;Accept-Query&#8221;.<\/li>\n\n\n\n<li>Agresiva: env\u00eda directamente una petici\u00f3n &#8220;QUERY&#8221;. Si el servidor no soporta ese formato, responde con &#8220;415 Unsupported Media Type&#8221; e incluye la cabecera &#8220;Accept-Query&#8221; para indicar los formatos permitidos.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Obviamente, si existe la posibilidad de acordar el formato, este enfoque es preferible porque evita viajes de ida y vuelta (round-trips) adicionales, aunque no siempre es viable.<\/p>\n\n\n\n<h2 id=\"h-el-concepto-de-recurso-equivalente\" class=\"wp-block-heading\">El concepto de &#8220;recurso equivalente&#8221;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para respetar el principio de la Web seg\u00fan el cual cada recurso debe poseer una URI, la RFC introduce el &#8220;recurso equivalente&#8221;: un recurso conceptual (accesible mediante GET) que representa el resultado de una petici\u00f3n QUERY espec\u00edfica junto con sus metadatos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El servidor puede materializar este recurso ofreciendo dos cabeceras distintas en la respuesta:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Location: apunta a la consulta activa y repetible. El cliente puede realizar un &#8220;GET&#8221; a esta URI para repetir la consulta y obtener datos actualizados. Esta URI puede ser temporal: si expira, el cliente simplemente vuelve a enviar la solicitud &#8220;QUERY&#8221; completa.<\/li>\n\n\n\n<li>Content-Location: identifica una captura est\u00e1tica e hist\u00f3rica de los resultados en ese momento preciso.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"h-gestion-de-redirecciones-y-peticiones-condicionales\" class=\"wp-block-heading\">Gesti\u00f3n de redirecciones y peticiones condicionales<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A diferencia de POST, donde las redirecciones &#8220;301&#8221; o &#8220;302&#8221; a menudo hac\u00edan que los navegadores transformaran la petici\u00f3n en un &#8220;GET&#8221; (perdiendo el body), con QUERY el cliente debe mantener el mismo m\u00e9todo y cuerpo hacia la nueva URI para los c\u00f3digos &#8220;301&#8221;, &#8220;302&#8221;, &#8220;307&#8221; y &#8220;308&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Solo el c\u00f3digo &#8220;303 See Other&#8221; impone el cambio a un GET. Esto resulta de utilidad para consultas as\u00edncronas muy pesadas: el servidor responde inmediatamente con &#8220;303&#8221; y una cabecera &#8220;Location&#8221;, indic\u00e1ndole al cliente que recupere el resultado ya procesado mediante un &#8220;GET&#8221; posterior.<\/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\">Para las peticiones condicionales, el cliente puede enviar cabeceras como &#8220;If-Modified-Since&#8221; bas\u00e1ndose en las marcas de tiempo recibidas previamente. Si los datos subyacentes no han cambiado, el servidor responde con un ligero &#8220;304 Not Modified&#8221;, ahorrando un valioso ancho de banda.<\/p>\n\n\n\n<h2 id=\"h-ingenieria-de-la-edge-network-el-almacenamiento-en-cache-basado-en-el-cuerpo\" class=\"wp-block-heading\">Ingenier\u00eda de la edge network: el almacenamiento en cach\u00e9 basado en el cuerpo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La parte m\u00e1s compleja de QUERY es, sin duda, la gesti\u00f3n de la cach\u00e9. Para los proxies inversos o CDNs actuales, acostumbrados a almacenar en cach\u00e9 fij\u00e1ndose solo en la cabecera, implica introducir mecanismos capaces de tener en cuenta tambi\u00e9n el cuerpo de la solicitud.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto significa que el sistema de cach\u00e9 debe calcular un hash del cuerpo de la petici\u00f3n para identificar las llamadas repetidas. Dicha operaci\u00f3n, seg\u00fan el tama\u00f1o del payload, puede introducir una velocidad proporcional a los datos enviados.<\/p>\n\n\n\n<h3 id=\"h-la-normalizacion\" class=\"wp-block-heading\">La normalizaci\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dados los problemas relativos al orden de los par\u00e1metros y a la ineficiencia de la cach\u00e9, la RFC especifica:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Para mejorar la eficiencia de la cach\u00e9, las cach\u00e9s PUEDEN eliminar primero las diferencias sem\u00e1nticamente insignificantes del contenido de la solicitud y de los metadatos correlacionados<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Este es un aspecto importante para mejorar la eficiencia de la cach\u00e9, pero introduce un riesgo: si el parser del proxy y el del servidor de origen normalizan los datos de manera distinta, se corre el riesgo de sufrir &#8220;Parser Differentials&#8221;\u2014la cach\u00e9 podr\u00eda devolver un falso positivo (datos de una consulta para otra distinta).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En caso de que exista una cadena de procesos intermediarios que pueda dar lugar a este desajuste, la cabecera prevista es:<\/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\">Para ser honestos, la cabecera <code>no-transform<\/code> representa el miedo visceral de quien dise\u00f1\u00f3 esta especificaci\u00f3n. Probablemente pas\u00f3 noches en vela depurando cach\u00e9s fallidas de las formas m\u00e1s sutiles posibles y termin\u00f3 rindi\u00e9ndose, introduciendo un par\u00e1metro de no alterabilidad justo dentro de una especificaci\u00f3n que en teor\u00eda declaraba su viabilidad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta cabecera acabar\u00e1 adopt\u00e1ndose en muchos escenarios reales precisamente para evitar cualquier desajuste impredecible entre parsers diferentes.<\/p>\n\n\n\n<h2 id=\"h-seguridad-privacidad-y-preflight-cors\" class=\"wp-block-heading\">Seguridad, privacidad y preflight CORS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hasta aqu\u00ed todo parece excelente, pero la introducci\u00f3n de un nuevo m\u00e9todo HTTP tiene repercusiones importantes en la seguridad y la privacidad.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>WAF Blind Spots: muchos Web Application Firewalls tradicionales analizan el body de las peticiones solo para m\u00e9todos no seguros (POST, PUT, PATCH). Al ver un m\u00e9todo &#8220;safe&#8221; como QUERY, podr\u00edan pasar por alto la inspecci\u00f3n profunda, permitiendo que payloads da\u00f1inos (SQL Injection, XSS) alcancen el backend. Los equipos de seguridad deben actualizar los WAFs y configurar reglas para monitorizar de cerca el tr\u00e1fico de QUERY.<\/li>\n\n\n\n<li>Controles anti-CSRF: si los endpoints de QUERY se implementan de forma deficiente y producen efectos colaterales en la base de datos (por ejemplo, utiliz\u00e1ndolos como si fuesen un POST), los middlewares anti-CSRF podr\u00edan ignorarlos al considerarlos seguros, exponiendo la aplicaci\u00f3n a vulnerabilidades.<\/li>\n\n\n\n<li>CORS Preflight: QUERY no es un m\u00e9todo &#8220;safelisted&#8221; en las especificaciones Fetch de WHATWG. Las peticiones cross-origin requerir\u00e1n siempre una solicitud de preflight &#8220;OPTIONS&#8221;, duplicando el viaje de ida y vuelta de la red. Es fundamental configurar adecuadamente la cabecera &#8220;Access-Control-Max-Age&#8221; para almacenar en cach\u00e9 el preflight y evitar cuellos de botella en el rendimiento.<\/li>\n\n\n\n<li>Ventajas para la privacidad: al desplazar los par\u00e1metros sensibles de la URI al cuerpo opaco de la solicitud, QUERY previene fugas de datos en los logs de los servidores y en los historiales de los navegadores, aline\u00e1ndose perfectamente con el principio de minimizaci\u00f3n de datos del GDPR.<\/li>\n<\/ul>\n\n\n\n<h3 id=\"h-el-punto-de-inflexion-para-graphql-y-headless-commerce\" class=\"wp-block-heading\">El punto de inflexi\u00f3n para GraphQL y headless commerce<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">GraphQL ha vivido durante a\u00f1os un dilema con el almacenamiento en cach\u00e9. Al ser sus consultas demasiado largas para GET, hist\u00f3ricamente se han enviado a trav\u00e9s de POST, desactivando las cach\u00e9s edge. Quienes se dedican a la ingenier\u00eda de software han tenido que idear soluciones complejas como las consultas persistentes (persisted queries) para restaurar el almacenamiento en cach\u00e9 con GET.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con QUERY, los clientes de GraphQL pueden enviar consultas completas especificando &#8220;application\/graphql&#8221;, incrementando el rendimiento y reduciendo la complejidad de la aplicaci\u00f3n.<\/p>\n\n\n\n<h3 id=\"h-soporte-en-los-backends\" class=\"wp-block-heading\">Soporte en los backends<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Node.js: el parser C++ integrado en las versiones recientes de Node (21.x y 22+) soporta QUERY de forma nativa. Frameworks como Fastify permiten el enrutamiento expl\u00edcito con el flag <code>{ hasBody: true }<\/code>.<\/li>\n\n\n\n<li>Go: el paquete &#8220;net\/http&#8221; gestiona los m\u00e9todos como cadenas de texto, y el enrutador introducido en Go 1.22 ya soporta el enrutamiento de QUERY por defecto.<\/li>\n\n\n\n<li>OpenAPI 3.2+: ofrece soporte oficial para la definici\u00f3n y documentaci\u00f3n del m\u00e9todo QUERY.<\/li>\n<\/ul>\n\n\n\n<h3 id=\"h-y-los-navegadores\" class=\"wp-block-heading\">\u00bfY los navegadores?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Los debates en el WHATWG (issue #12594) est\u00e1n definiendo el soporte para <code>&lt;form method=\"query\"&gt;<\/code>. Cuando esto se implemente, podremos actualizar por fin los formularios de b\u00fasqueda web y decir adi\u00f3s al molesto aviso de &#8220;confirmar reenv\u00edo de formulario&#8221; al actualizar la p\u00e1gina.<\/p>\n\n\n\n<h2 id=\"h-un-protocolo-finalmente-maduro\" class=\"wp-block-heading\">\u00bfUn protocolo finalmente maduro?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El m\u00e9todo QUERY no es una simple adici\u00f3n sint\u00e1ctica. Resolvi\u00f3 una incoherencia estructural que arrastramos desde los inicios de la Web.<\/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\">Al devolver la dignidad sem\u00e1ntica a las lecturas complejas, nos permite construir APIs m\u00e1s limpias, seguras y eficientes, liber\u00e1ndonos de la obligaci\u00f3n de sacrificar la escalabilidad de la cach\u00e9 en favor de la privacidad y el espacio de transporte.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La transici\u00f3n requerir\u00e1 tiempo, sobre todo para la adaptaci\u00f3n de los clientes web y de los sistemas de seguridad de red. Pero el camino est\u00e1 trazado: consultar no es modificar, y a partir de hoy el protocolo HTTP lo sabe.<\/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","protected":false},"excerpt":{"rendered":"<p>Durante casi treinta a\u00f1os, la Web ha convivido con una paradoja sem\u00e1ntica que cualquiera que desarrolle para el backend conoce bien: \u00bfc\u00f3mo se ejecuta una consulta compleja, voluminosa o que contiene datos sensibles, si el \u00fanico m\u00e9todo &#8220;seguro&#8221; disponible no permite un cuerpo de solicitud? Pensemos en cuando necesitamos enviar una consulta de b\u00fasqueda estructurada&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/\">Read more<\/a><\/p>\n","protected":false},"author":238,"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":[10640],"tags":[10747],"collections":[13012],"class_list":["post-36311","post","type-post","status-publish","format-standard","has-post-thumbnail","category-desarrollo-movil","tag-desarrollo-web","collections-top-of-the-week-es","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>HTTP QUERY: el m\u00e9todo que faltaba entre GET y POST<\/title>\n<meta name=\"description\" content=\"HTTP QUERY llega como alternativa a GET y POST para enviar consultas complejas en el body sin perder la sem\u00e1ntica de una petici\u00f3n de lectura.\" \/>\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\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"HTTP QUERY: el m\u00e9todo que faltaba entre GET y POST\" \/>\n<meta property=\"og:description\" content=\"HTTP QUERY llega como alternativa a GET y POST para enviar consultas complejas en el body sin perder la sem\u00e1ntica de una petici\u00f3n de lectura.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-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-09-15T13:09:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-15T13:13:04+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=\"Arnaldo Morena\" \/>\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=\"Arnaldo Morena\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/frontend-es\\\/desarrollo-movil\\\/http-query-el-metodo-que-faltaba-entre-get-y-post\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/frontend-es\\\/desarrollo-movil\\\/http-query-el-metodo-que-faltaba-entre-get-y-post\\\/\"},\"author\":{\"name\":\"Arnaldo Morena\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/72209dcaf2205f28968d38489892bd17\"},\"headline\":\"HTTP QUERY: el m\u00e9todo que faltaba entre GET y POST\",\"datePublished\":\"2026-09-15T13:09:17+00:00\",\"dateModified\":\"2026-09-15T13:13:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/frontend-es\\\/desarrollo-movil\\\/http-query-el-metodo-que-faltaba-entre-get-y-post\\\/\"},\"wordCount\":2666,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/frontend-es\\\/desarrollo-movil\\\/http-query-el-metodo-que-faltaba-entre-get-y-post\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/25-httpquery-1.jpg\",\"keywords\":[\"Desarrollo web\"],\"articleSection\":[\"Desarrollo m\u00f3vil\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/frontend-es\\\/desarrollo-movil\\\/http-query-el-metodo-que-faltaba-entre-get-y-post\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/frontend-es\\\/desarrollo-movil\\\/http-query-el-metodo-que-faltaba-entre-get-y-post\\\/\",\"name\":\"HTTP QUERY: el m\u00e9todo que faltaba entre GET y POST\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/frontend-es\\\/desarrollo-movil\\\/http-query-el-metodo-que-faltaba-entre-get-y-post\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/frontend-es\\\/desarrollo-movil\\\/http-query-el-metodo-que-faltaba-entre-get-y-post\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/25-httpquery-1.jpg\",\"datePublished\":\"2026-09-15T13:09:17+00:00\",\"dateModified\":\"2026-09-15T13:13:04+00:00\",\"description\":\"HTTP QUERY llega como alternativa a GET y POST para enviar consultas complejas en el body sin perder la sem\u00e1ntica de una petici\u00f3n de lectura.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/frontend-es\\\/desarrollo-movil\\\/http-query-el-metodo-que-faltaba-entre-get-y-post\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/frontend-es\\\/desarrollo-movil\\\/http-query-el-metodo-que-faltaba-entre-get-y-post\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/frontend-es\\\/desarrollo-movil\\\/http-query-el-metodo-que-faltaba-entre-get-y-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\\\/es\\\/frontend-es\\\/desarrollo-movil\\\/http-query-el-metodo-que-faltaba-entre-get-y-post\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/frontend-es\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Desarrollo m\u00f3vil\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/frontend-es\\\/desarrollo-movil\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"HTTP QUERY: el m\u00e9todo que faltaba entre GET y 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\\\/72209dcaf2205f28968d38489892bd17\",\"name\":\"Arnaldo Morena\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/whatsapp-image-100x100.jpg\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/whatsapp-image-100x100.jpg\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/whatsapp-image-100x100.jpg\",\"caption\":\"Arnaldo Morena\"},\"description\":\"First steps i moved into computers world were my beloved basic programs I wrote on a Zx Spectrum in early 80s. In 90s , while i was studing economic , i was often asked to help people on using personal computer for every day business : It's been a one way ticket. First and lasting love was for managing data , so i have started using msaccess and SqlServer to build databases , elaborate information and reports using tons and tons of Visual Basic code . My web career started developing in Asp and Asp.net , then I began to use php . I like to have an administrative approach ,too .In fact i have earned many certifications on database administration . Mixing up this two factors i developed many programs for data collecting and analyzing, being involved on publishing reports and articles based on elaborated information , in scenarios as Public Administration training , collaboration project between universities all over the world or survey on genetic structure and their relative kind of analysis. Actually i am involved in collecting data by using automated sensor IoT, that lead me on joining Arduino community in Rome, and integrating my application with more instruments , working in fields like Open and Big data , and using data mining software .\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/arnymore\\\/\"],\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/author\\\/arnaldo-morena\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"HTTP QUERY: el m\u00e9todo que faltaba entre GET y POST","description":"HTTP QUERY llega como alternativa a GET y POST para enviar consultas complejas en el body sin perder la sem\u00e1ntica de una petici\u00f3n de lectura.","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\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/","og_locale":"en_US","og_type":"article","og_title":"HTTP QUERY: el m\u00e9todo que faltaba entre GET y POST","og_description":"HTTP QUERY llega como alternativa a GET y POST para enviar consultas complejas en el body sin perder la sem\u00e1ntica de una petici\u00f3n de lectura.","og_url":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2026-09-15T13:09:17+00:00","article_modified_time":"2026-09-15T13:13:04+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":"Arnaldo Morena","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Arnaldo Morena","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/"},"author":{"name":"Arnaldo Morena","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/72209dcaf2205f28968d38489892bd17"},"headline":"HTTP QUERY: el m\u00e9todo que faltaba entre GET y POST","datePublished":"2026-09-15T13:09:17+00:00","dateModified":"2026-09-15T13:13:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/"},"wordCount":2666,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1.jpg","keywords":["Desarrollo web"],"articleSection":["Desarrollo m\u00f3vil"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/","url":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/","name":"HTTP QUERY: el m\u00e9todo que faltaba entre GET y POST","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/07\/25-httpquery-1.jpg","datePublished":"2026-09-15T13:09:17+00:00","dateModified":"2026-09-15T13:13:04+00:00","description":"HTTP QUERY llega como alternativa a GET y POST para enviar consultas complejas en el body sin perder la sem\u00e1ntica de una petici\u00f3n de lectura.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-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\/es\/frontend-es\/desarrollo-movil\/http-query-el-metodo-que-faltaba-entre-get-y-post\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Frontend","item":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/"},{"@type":"ListItem","position":3,"name":"Desarrollo m\u00f3vil","item":"https:\/\/www.codemotion.com\/magazine\/es\/frontend-es\/desarrollo-movil\/"},{"@type":"ListItem","position":4,"name":"HTTP QUERY: el m\u00e9todo que faltaba entre GET y 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\/72209dcaf2205f28968d38489892bd17","name":"Arnaldo Morena","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/whatsapp-image-100x100.jpg","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/whatsapp-image-100x100.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/whatsapp-image-100x100.jpg","caption":"Arnaldo Morena"},"description":"First steps i moved into computers world were my beloved basic programs I wrote on a Zx Spectrum in early 80s. In 90s , while i was studing economic , i was often asked to help people on using personal computer for every day business : It's been a one way ticket. First and lasting love was for managing data , so i have started using msaccess and SqlServer to build databases , elaborate information and reports using tons and tons of Visual Basic code . My web career started developing in Asp and Asp.net , then I began to use php . I like to have an administrative approach ,too .In fact i have earned many certifications on database administration . Mixing up this two factors i developed many programs for data collecting and analyzing, being involved on publishing reports and articles based on elaborated information , in scenarios as Public Administration training , collaboration project between universities all over the world or survey on genetic structure and their relative kind of analysis. Actually i am involved in collecting data by using automated sensor IoT, that lead me on joining Arduino community in Rome, and integrating my application with more instruments , working in fields like Open and Big data , and using data mining software .","sameAs":["https:\/\/www.linkedin.com\/in\/arnymore\/"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/arnaldo-morena\/"}]}},"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":"Arnaldo Morena","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/arnaldo-morena\/"},"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":"Arnaldo Morena","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/arnaldo-morena\/"},"uagb_comment_info":0,"uagb_excerpt":"Durante casi treinta a\u00f1os, la Web ha convivido con una paradoja sem\u00e1ntica que cualquiera que desarrolle para el backend conoce bien: \u00bfc\u00f3mo se ejecuta una consulta compleja, voluminosa o que contiene datos sensibles, si el \u00fanico m\u00e9todo &#8220;seguro&#8221; disponible no permite un cuerpo de solicitud? Pensemos en cuando necesitamos enviar una consulta de b\u00fasqueda estructurada&#8230;&hellip;","lang":"es","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/36311","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\/238"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=36311"}],"version-history":[{"count":1,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/36311\/revisions"}],"predecessor-version":[{"id":36312,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/36311\/revisions\/36312"}],"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=36311"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=36311"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=36311"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=36311"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}