¿Cuándo usas POST y cuándo usas GET?

Resuelto Thomas Owens asked hace 16 años • 27 respuestas

Por lo que puedo deducir, hay tres categorías:

  1. Nunca usar GETy usarPOST
  2. Nunca usar POSTy usarGET
  3. No importa cuál uses.

¿Estoy en lo cierto al suponer esos tres casos? Si es así, ¿cuáles son algunos ejemplos de cada caso?

Thomas Owens avatar Sep 06 '08 02:09 Thomas Owens
Aceptado

Úselo POSTpara acciones destructivas como creación (soy consciente de la ironía), edición y eliminación, porque no puede realizar una POSTacción en la barra de direcciones de su navegador. Úselo GETcuando sea seguro permitir que una persona solicite una acción. Entonces una URL como:

http://myblog.org/admin/posts/delete/357

Debería llevarlo a una página de confirmación, en lugar de simplemente eliminar el elemento. De esta manera es mucho más fácil evitar accidentes.

POSTTambién es más seguro que GET, porque no incluye información en una URL. Por lo tanto, usarlo GETcomo methodformulario HTML que recopila una contraseña u otra información confidencial no es la mejor idea.

Una nota final: POSTpuede transmitir una mayor cantidad de información que GET. 'POST' no tiene restricciones de tamaño para los datos transmitidos, mientras que 'GET' está limitado a 2048 caracteres.

Brian Warshaw avatar Sep 05 '2008 19:09 Brian Warshaw

En breve

  • Usar GETpara safe andidempotentsolicitudes
  • Usar POSTpara neither safe nor idempotentsolicitudes

En detalles Hay un lugar adecuado para cada uno. Incluso si no sigue los principios RESTful , se puede ganar mucho aprendiendo sobre REST y cómo funciona un enfoque orientado a recursos.

Una aplicación RESTful funcionará use GETspara operaciones que sean ambas safe and idempotent.

Una safeoperación es una operación que no se not change the datasolicita.

Una idempotentoperación es aquella en la que el resultado dará be the sameigual cuantas veces lo solicites.

Es lógico que, como los GET se utilizan para operaciones seguras , automáticamente también sean idempotentes . Normalmente, un GET se utiliza para recuperar un recurso (por ejemplo, una pregunta y sus respuestas asociadas en el desbordamiento de la pila) o una colección de recursos.

Se utilizará una aplicación RESTful PUTspara operaciones que sean not safe but idempotent.

Sé que la pregunta era sobre GET y POST, pero volveré a POST en un segundo.

Normalmente, un PUT se utiliza para editar un recurso (por ejemplo, editar una pregunta o una respuesta en el desbordamiento de la pila).

A POSTse usaría para cualquier operación que sea neither safe or idempotent.

Normalmente, se usaría un POST para crear un nuevo recurso, por ejemplo, crear una pregunta NUEVA SO (aunque en algunos diseños también se usaría un PUT para esto).

Si ejecuta el POST dos veces, terminará creando DOS preguntas nuevas.

También hay una operación DELETE, pero supongo que puedo dejarla ahí :)

Discusión

En términos prácticos, los navegadores web modernos generalmente solo admiten GET y POST de manera confiable (puede realizar todas estas operaciones mediante llamadas de JavaScript, pero en términos de ingresar datos en formularios y presionar enviar, generalmente tiene las dos opciones). En una aplicación RESTful, la POST a menudo se anulará para proporcionar también las llamadas PUT y DELETE.

Pero, incluso si no sigue los principios RESTful, puede resultar útil pensar en términos de utilizar GET para recuperar/ver información y POST para crear/editar información.

Nunca debes usar GET para una operación que altere datos. Si un motor de búsqueda rastrea un enlace a su operación malvada, o el cliente lo marca como favorito, podría significar un gran problema.

reefnet_alex avatar Sep 05 '2008 19:09 reefnet_alex

Utilice GET si no le importa que se repita la solicitud (es decir, no cambia de estado).

Utilice POST si la operación cambia el estado del sistema.

Douglas Leeder avatar Sep 05 '2008 19:09 Douglas Leeder

Version corta

OBTENER: generalmente se usa para solicitudes de búsqueda enviadas o cualquier solicitud en la que desee que el usuario pueda abrir la página exacta nuevamente.

Ventajas de OBTENER:

  • Las URL se pueden marcar como favoritas de forma segura.
  • Las páginas se pueden recargar de forma segura.

Desventajas de OBTENER:

  • Las variables se pasan a través de la URL como pares nombre-valor. (Riesgo de seguridad)
  • Número limitado de variables que se pueden pasar. (Según el navegador. Por ejemplo, Internet Explorer está limitado a 2048 caracteres ) .

POST: Se utiliza para solicitudes de mayor seguridad en las que los datos pueden usarse para alterar una base de datos o una página que no desea que alguien agregue a favoritos.

Ventajas de la CORREO:

  • Los pares nombre-valor no se muestran en la URL. (Seguridad += 1)
  • Se puede pasar un número ilimitado de pares nombre-valor mediante POST. Referencia.

Desventajas de la publicación:

  • La página que utilizó datos POST no se puede marcar como favorita. (Si así lo desea).

Versión más larga

Directamente desde el Protocolo de transferencia de hipertexto - HTTP/1.1 :

9.3 OBTENER

El método GET significa recuperar cualquier información (en forma de entidad) identificada por el URI de solicitud. Si el URI de solicitud se refiere a un proceso de producción de datos, serán los datos producidos los que se devolverán como entidad en la respuesta y no el texto fuente del proceso, a menos que ese texto sea el resultado del proceso.

La semántica del método GET cambia a un "GET condicional" si el mensaje de solicitud incluye un campo de encabezado If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match o If-Range. Un método GET condicional solicita que la entidad se transfiera solo bajo las circunstancias descritas por los campos de encabezado condicional. El método GET condicional tiene como objetivo reducir el uso innecesario de la red al permitir que las entidades almacenadas en caché se actualicen sin requerir múltiples solicitudes ni transferir datos que ya posee el cliente.

La semántica del método GET cambia a un "GET parcial" si el mensaje de solicitud incluye un campo de encabezado Rango. Un GET parcial solicita que solo se transfiera una parte de la entidad, como se describe en la sección 14.35. El método GET parcial tiene como objetivo reducir el uso innecesario de la red al permitir que se completen entidades parcialmente recuperadas sin transferir datos que ya están en poder del cliente.

La respuesta a una solicitud GET se puede almacenar en caché si y sólo si cumple con los requisitos para el almacenamiento en caché HTTP descritos en la sección 13.

Consulte la sección 15.1.3 para conocer las consideraciones de seguridad cuando se utiliza para formularios.

9.5 PUBLICAR

El método POST se utiliza para solicitar que el servidor de origen acepte la entidad incluida en la solicitud como un nuevo subordinado del recurso identificado por el URI de solicitud en la línea de solicitud. POST está diseñado para permitir que un método uniforme cubra las siguientes funciones:

  • Anotación de recursos existentes;

  • Publicar un mensaje en un tablero de anuncios, grupo de noticias, lista de correo o grupo similar de artículos;

  • Proporcionar un bloque de datos, como el resultado de enviar un formulario, a un proceso de manejo de datos;

  • Ampliar una base de datos mediante una operación de adición.

La función real realizada por el método POST la determina el servidor y generalmente depende del URI de solicitud. La entidad publicada está subordinada a ese URI de la misma manera que un archivo está subordinado a un directorio que lo contiene, un artículo de noticias está subordinado a un grupo de noticias en el que se publica o un registro está subordinado a una base de datos.

Es posible que la acción realizada por el método POST no dé como resultado un recurso que pueda identificarse mediante un URI. En este caso, 200 (OK) o 204 (Sin contenido) es el estado de respuesta adecuado, dependiendo de si la respuesta incluye o no una entidad que describa el resultado.

Cimplicity avatar Jun 03 '2009 09:06 Cimplicity