¿Cuál es la diferencia entre POST y GET? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Solo recientemente he estado involucrado con PHP/AJAX/jQuery y me parece que una parte importante de estas tecnologías es la de POST y GET.

Primero, ¿cuál es la diferencia entre POST y GET? A través de la experimentación, sé que GET agrega las variables que regresan y sus valores a la cadena URL

website.com/directory/index.php?name=YourName&bday=YourBday

Pero POST no.

Entonces, ¿es esta la única diferencia o hay reglas o convenciones específicas para usar una u otra?

Segundo, también he visto POST y GET fuera de PHP: también en AJAX y jQuery. ¿En qué difieren POST y GET entre estos 3? ¿Son la misma idea, la misma funcionalidad, solo utilizados ¿diferente?

Author: nbro, 2010-08-13

8 answers

GET y POST son dos tipos diferentes de peticiones HTTP.

De acuerdo con Wikipedia :

GET solicita una representación del recurso especificado. Tenga en cuenta que GET no debe usarse para operaciones que causen efectos secundarios, como usarlo para realizar acciones en aplicaciones web. Una de las razones de esto es que GET puede ser utilizado arbitrariamente por robots o rastreadores, que no deberían tener en cuenta los efectos secundarios que una solicitud debe causar.

Y

POST envía datos para ser procesados (por ejemplo, desde un formulario HTML) al recurso identificado. Los datos se incluyen en el cuerpo de la solicitud. Esto puede resultar en la creación de un nuevo recurso o las actualizaciones de los recursos existentes o ambos.

Así que esencialmente GET se usa para recuperar datos remotos, y POST se usa para insertar/actualizar datos remotos.


Especificación HTTP/1.1 (RFC 2616) sección 9 Definiciones del Método contiene más información sobre GET y POST, así como los otros métodos HTTP, si está interesado.

Además de explicar los usos previstos de cada método, la especificación también proporciona al menos una razón práctica por la que GET solo debe usarse para recuperar datos:

Los autores de servicios que usan el protocolo HTTP NO DEBEN usar formularios basados en GET para el envío de datos confidenciales, porque esto hará que estos datos sean codificado en el URI de solicitud. Muchos servidores, proxies y agentes de usuario existentes registrarán el URI de solicitud en algún lugar donde pueda ser visible para terceros. Los servidores pueden usar el envío de formularios basados en correos en su lugar


Finalmente, una consideración importante cuando se usa GET para solicitudes AJAX es que algunos navegadores, es decir, en particular, almacenarán en caché los resultados de una solicitud GET. Así que si, por ejemplo, encuesta utilizando la misma solicitud GET siempre obtendrá la misma resultados, incluso si los datos que está consultando se actualizan en el lado del servidor. Una forma de aliviar este problema es hacer que la URL sea única para cada solicitud añadiendo una marca de tiempo.
 389
Author: Justin Ethier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-28 19:46:37

A POST, a diferencia de GET, normalmente tiene información relevante en el cuerpo de la solicitud. (A GET no debe tener un cuerpo, por lo que aparte de las cookies, el único lugar para pasar información es en la URL.) Además de mantener la URL relativamente limpia, POST también le permite enviar mucha más información (ya que las URL son limitadas en longitud, para todos los propósitos prácticos), y le permite enviar casi cualquier tipo de datos (los formularios de carga de archivos, por ejemplo, no pueden usar GET -- tienen que usar POST más un contenido especial tipo / codificación).

Aparte de eso, un POST connota que la solicitud cambiará algo, y no debería ser rehecha de cualquier manera. Es por eso que a veces ves que tu navegador te pregunta si quieres volver a enviar datos del formulario cuando presionas el botón "atrás".

GET, por otro lado, debería ser idempotent meaning lo que significa que podría hacerlo un millón de veces y el servidor hará lo mismo (y mostrará básicamente el mismo resultado) cada vez.

 76
Author: cHao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-30 00:30:52

Aprenda sobre el protocolo HTTP

Esto es similar a conducir un coche. Te compras un auto y vas a la carretera, pero no conoces ninguna de las señales, luces u otras reglas que debes obedecer. Obviamente no eres capaz de conducir a pesar de que sabes cómo manejar un coche. Al menos no con seguridad. No para ti, ni para los demás.

Debería aprender un poco sobre el protocolo HTTP. GET / POST no están relacionados (al menos no directamente) con PHP/AJAX/jQuery o similares. Los usan porque están utilizando el protocolo HTTP para la comunicación. Y hay mucho más en el protocolo HTTP que solo GET y POST.

Echa un vistazo a algunos de estos y luego buscar por su cuenta también:

 22
Author: Robert Koritnik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-13 10:54:08

Aunque no es una descripción de las diferencias, a continuación hay un par de cosas en las que pensar al elegir el método correcto.

  • Las solicitudes GET pueden ser almacenadas en caché por el navegador, lo que puede ser un problema (o beneficio) cuando se usa ajax.
  • Las solicitudes GET exponen parámetros a los usuarios (POST también lo hace, pero son menos visibles).
  • POST puede pasar mucha más información al servidor y puede ser de casi cualquier longitud.
 22
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-23 04:51:54

POST y GET son dos métodos de solicitud HTTP. GET suele estar destinado a recuperar algunos datos, y se espera que sea idempotente (repetir la consulta no tiene ningún efecto secundario) y solo puede enviar cantidades limitadas de datos de parámetros al servidor. Las solicitudes GET a menudo se almacenan en caché de forma predeterminada por algunos navegadores si no tiene cuidado.

POST está destinado a cambiar el estado del servidor. Lleva más datos, y repetir la consulta se permite (y a menudo se espera) tener efectos secundarios como la creación de dos mensajes en lugar de uno.

 15
Author: Victor Nicollet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-13 13:44:33

Si está trabajando con descanso, GET debe usarse para solicitudes en las que solo está obteniendo datos, y POST debe usarse para solicitudes en las que está haciendo que algo suceda.

Algunos ejemplos:

  • OBTENER la página que muestra una pregunta SO en particular

  • PUBLICAR un comentario en la entrada [3]}

  • Envíe una solicitud de CORREO haciendo clic en el botón "Añadir al carrito".

 11
Author: Skilldrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-28 11:51:51

Con POST también puede hacer codificación mime de varias partes, lo que significa que también puede adjuntar archivos. Además, si está utilizando variables post a través de la navegación de las páginas, el usuario recibirá una advertencia preguntando si desea volver a enviar el parámetro post. Por lo general, se ven igual en una solicitud HTTP, pero solo debe atenerse a PUBLICAR si necesita "PUBLICAR" algo en un servidor y "OBTENER" si necesita obtener algo de un servidor, ya que esa es la forma en que se pretendía.

 6
Author: Matt Williamson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-13 13:45:40

La única diferencia "grande" entre POST & GET (cuando se usan con AJAX) es que GET es una URL provista, están limitadas en su longitud (ya que la URL no es infinita en longitud).

 1
Author: Activist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-13 15:07:05