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

Resuelto Hristo asked hace 14 años • 7 respuestas

Recientemente me he involucrado con PHP/AJAX/jQuery y me parece que una parte importante de estas tecnologías es la de POSTy GET.

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

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

pero POSTno lo hace.

Entonces, ¿es ésta la única diferencia o existen reglas o convenciones específicas para usar uno u otro?

En segundo lugar, también lo he visto POSTfuera GETde PHP: también en AJAX y jQuery. ¿ En qué POSTse GETdiferencian estos 3? ¿Son la misma idea, la misma funcionalidad, sólo que se utilizan de manera diferente?

Hristo avatar Aug 13 '10 20:08 Hristo
Aceptado

GETy POSThay dos tipos diferentes de solicitudes HTTP.

Según 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 razón para esto es que GET puede ser utilizado arbitrariamente por robots o rastreadores, que no deberían tener en cuenta los efectos secundarios que debería causar una solicitud.

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 la actualización de recursos existentes o ambas.

Básicamente, GETse utiliza para recuperar datos remotos y POSTpara insertar/actualizar datos remotos.


Especificación HTTP/1.1 (RFC 2616) sección 9 Definiciones de métodos contiene más información sobre GETotros POSTmé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 GETsolo debe usarse para recuperar datos:

Los autores de servicios que utilizan el protocolo HTTP NO DEBEN utilizar formularios basados ​​en GET para el envío de datos confidenciales, ya que esto hará que estos datos se codifiquen 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 utilizar el envío de formularios basado en POST en su lugar


Finalmente, una consideración importante cuando se utiliza GETpara solicitudes AJAX es que algunos navegadores (IE en particular) almacenarán en caché los resultados de una GETsolicitud. Entonces, si, por ejemplo, realiza una encuesta utilizando la misma GETsolicitud, siempre obtendrá los mismos 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 agregando una marca de tiempo.

Justin Ethier avatar Aug 13 '2010 13:08 Justin Ethier

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

Aparte de eso, a POSTconnota que la solicitud cambiará algo y no debe rehacerse de cualquier manera. Es por eso que a veces ves que tu navegador te pregunta si deseas volver a enviar los datos del formulario cuando presionas el botón "atrás".

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

cHao avatar Aug 13 '2010 13:08 cHao

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

  • El navegador puede almacenar en caché las solicitudes GET, lo que puede ser un problema (o beneficio) al usar 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 tener casi cualquier longitud.
Alex avatar Aug 13 '2010 13:08 Alex

POST y GET son dos métodos de solicitud HTTP . GET generalmente está 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 en algunos navegadores si no se tiene cuidado.

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

Victor Nicollet avatar Aug 13 '2010 13:08 Victor Nicollet