¿Cuál es la diferencia entre POST y GET? [duplicar]
Recientemente me he 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 devueltas y sus valores a la cadena URL.
website.example/directory/index.php?name=YourName&bday=YourBday
pero POST
no 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 POST
fuera GET
de PHP: también en AJAX y jQuery. ¿ En qué POST
se GET
diferencian estos 3? ¿Son la misma idea, la misma funcionalidad, sólo que se utilizan de manera diferente?
GET
y POST
hay 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, GET
se utiliza para recuperar datos remotos y POST
para insertar/actualizar datos remotos.
Especificación HTTP/1.1 (RFC 2616) sección 9 Definiciones de métodos contiene más información sobre
GET
otros POST
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 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
GET
para solicitudes AJAX es que algunos navegadores (IE en particular) almacenarán en caché los resultados de una GET
solicitud. Entonces, si, por ejemplo, realiza una encuesta utilizando la misma GET
solicitud, 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.
A POST
, a diferencia de a GET
, normalmente tiene información relevante en el cuerpo de la solicitud. (A GET
no 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, POST
tambié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 POST
más un tipo de contenido/codificación especial).
Aparte de eso, a POST
connota 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.
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.
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.