2010-01-03 31 views
5

¿Es una mala práctica de emitir la petición POST siguiente:HTTP GET y POST recomendaciones parámetros

/test?a=1&b=2 
POST data: c=3&d=4 

en cuenta que 2 parámetros son parte de la URL y 2 parámetros son parte del contenido de la entrada.

Por otro lado, es la siguiente regla todavía se recomienda: solicitud

  • GET: recuperar el contenido de el servidor, pero no cambia nada en el servidor.
  • solicitud POST: publicar contenido al servidor que puede modificar datos en el servidor

Me pregunto porque veo un poco de todo en línea.

Laurent Luce

+1

Sí, la gente todavía cree que debe utilizar '' s del poste para cualquier cosa que pueda modificar los datos, pero * I * todavía piensan que es un montón de cr ap. Eso hace que hagas cosas realmente extravagantes cuando lo único que quieres es un simple enlace Eliminar. Creo que siempre que tengas algunas comprobaciones adecuadas en el servidor para que los webcrawlers no arruinen tu sitio, no es gran cosa. – mpen

+1

Además, mezclar los métodos de parámetros está bien, pero realmente no sé por qué lo harías. Desde el punto de vista de la programación, tiene más sentido ser consistente. La única excepción que puedo pensar es para los formularios de inicio de sesión, a veces quieres redirigir a la página de inicio de sesión y luego tiras el enlace redirect_back_to_this_page en el GET, y no hay muchos puntos copiando eso en el formulario. – mpen

Respuesta

6

Sí, sus suposiciones son correctas. Debe ser coherente en la forma en que pasa sus parámetros o requiere que se pasen los parámetros, pero realmente no va a hacer ningún daño.

Las operaciones GET se supone que son operaciones seguras, que no realizan ningún efecto secundario (además del almacenamiento en caché, etc.), por lo que se almacenan fácilmente en caché por proxies y demás. Las operaciones de POST por otro lado pueden encerrar efectos secundarios.

Yo recomendaría leer el Wikipedia entry on HTTP protocol:

GET

Solicitudes una representación del recurso especificado. Tenga en cuenta que GET no debe usarse para operaciones que causan efectos secundarios, como su uso para realizar acciones en aplicaciones web. Una razón para esto es que GET puede ser usado arbitrariamente por robots o rastreadores, que no deberían tener que considerar los efectos secundarios que una solicitud debería causar. Vea los métodos seguros a continuación.

la POST

datos somete a ser procesados ​​(por ejemplo, de un formulario HTML) para el recurso identificado. Los datos están incluidos en el cuerpo de la solicitud. Esto puede dar como resultado la creación de un nuevo recurso o las actualizaciones de los recursos existentes o ambos.

También existen otras operaciones (por ejemplo HEAD, PUT, DELETE), y debería considerar usarlas si está diseñando una API. Estos son ampliamente discutidos en el diseño RESTful API.

1

No hay nada de malo en eso. El motivo por el que se deben enviar los datos de modificación en el POST es que no se volverán a modificar los datos si el usuario hizo clic en el botón Actualizar. En ese caso, solo se enviará la información GET.

+1

Si la persona accede a la actualización, y la última operación fue una POST (como en esta solicitud), lo más probable es que vuelva a realizar la operación de publicación. A menos que el servidor emita un redireccionamiento a una operación GET. – notnoop

+1

probablemente significó marcadores/indexados por los motores de búsqueda. Realmente no quiere que las solicitudes de modificación de datos sean indexadas ... –

3

Esa regla definitivamente todavía se recomienda.

Se refleja en el comportamiento de actualización de los navegadores modernos. Estos actualizarán felizmente con valores GET, pero mostrarán un cuadro de diálogo de advertencia en una actualización de un POST ("¿estás seguro de que quieres volver a enviar?", Etc.).

Parece que estaba intentando combinar los dos métodos (GET y POST) ...mediante POSTING a una URL con valores GET. Si bien esto debería funcionar bien, no se hace comúnmente. Las formas generalmente usan exclusivamente uno u otro.

2

Sí, la semántica de GET y POST debe respetarse.

Teniendo en cuenta este hecho, a continuación, a menudo hay una muy buena razón para poner algunos parámetros en el GET y algunos en el POST vars - considerar el caso en el que usted tiene un guión basado en web que hace algo como:

UPDATE datatable SET quantity=30 WHERE order=21559 

Esto podría ser representado como:

/update?order=21559 
POST data: quantity=30 

C.

Cuestiones relacionadas