2010-02-01 13 views

Respuesta

22

Un POST HTTP pueden ser marcados, pero desde un marcador, consiste sólo en la URL, todos los parámetros del formulario se perderán. Esto a menudo significa que el servidor web no sabe qué hacer con la solicitud, ya que esperaba algunos parámetros de formulario.

Si envía un formulario a través de una solicitud GET, todos los parámetros del formulario van a la URL (después del?), Por lo que un marcador contendrá toda la información necesaria para que el servidor web reconstruya la página una segunda vez (a excepción de las cookies, tal vez, pero es más probable que un servidor web lo maneje correctamente)

+4

problemilla: Desde "marcada" tiene una fuerte implicación de un navegador, y los navegadores no almacenan el método HTTP asociado a un marcador, a continuación, un POST en realidad no puede ser marcada. La URL de un POST se puede almacenar y ejecutar como un POST repetido, pero en mi opinión, eso es distinto de un "marcador". – Palpatim

8

No se puede marcar un POST. Si intenta marcar un POST, se generará una operación GET en la URL. Hay una muy buena razón para esto, se supone que las solicitudes GET son idempotentes, es decir, hacer la misma solicitud GET varias veces debería dar como resultado la misma respuesta. Las solicitudes POST, por otro lado, no lo son. Permitir que los POST se marquen como favoritos puede hacer que pagues algo dos veces, transfiriendo de nuevo dinero de tu cuenta bancaria, etc.

2

En una solicitud GET toda la información para la solicitud está codificada en la URL. En una solicitud POST, la solicitud se realiza a la URL especificada, pero toda la información relacionada con la solicitud, p. contenido de formulario, se pasa en el cuerpo de la solicitud.

Cuando marca una URL, solo está marcando la URL, no el cuerpo de la solicitud. P.ej. si completa un formulario en la página web que luego se pasa al servidor web como solicitud POST, y luego marca la página de respuestas en su navegador, el navegador anotará solo la URL, pero no el cuerpo del formulario.

Además, cuando marca una página en un navegador, el marcador incluye solo la URL, pero no el método de solicitud. El navegador siempre usa GET para todos los marcadores.

5

No es que uno u otro no se pueda marcar como favorito. Es más que hacer clic en un marcador será siempre disparar una solicitud GET! Al hacer clic en un enlace simple, marcador, botón de navegación del navegador, ingresar la barra de direcciones del navegador, etcétera, se activa una solicitud GET. Nunca disparan una solicitud POST. Una solicitud POST es normalmente solo se activa cuando envía un HTML <form> que se establece con method="post". Puede programar perfectamente el software para marcar una solicitud POST, pero no lo hace por razones delicadas.

Lo especial aquí es que una solicitud GET es idempotent. En otras palabras, es garantizado para dar el mismo resultado cada vez que lo invoca. Eso es bastante simple ya que todos los parámetros de solicitud están disponibles en la solicitud URL. Puede usarlo para preprocesar datos antes de la visualización. En el mundo Java Servlet, normalmente utiliza el método doGet() para esto, que precarga algunas cosas en función de los parámetros de solicitud al final reenvía la solicitud a un archivo JSP para su visualización.

A POST solicitud sin embargo es no idempotent. En otras palabras, es no garantizado para dar el mismo resultado cada vez que lo invoca. Todos los parámetros de solicitud están incluidos en la solicitud cuerpo. No es visible para el usuario final y tampoco es visible en la URL de solicitud. En otras palabras, no puedes marcarlo como favorito. Puede usarlo ro postprocess datos después de enviar un formulario. En el mundo Java Servlet, normalmente utiliza el método doPost() para esto, que reúne los parámetros de solicitud y los almacena en alguna base de datos y al final reenvía o redirige la solicitud a un archivo JSP para resultado/confirmación/visualización.

+0

muy bien escrito. ¿La idempotencia también incluye una segunda solicitud será ignorada hasta que se entregue la respuesta de la primera solicitud (en el caso de GET). –

0

De hecho, esas solicitudes no están marcadas, pero URI.

Los parámetros GET se envían como parte de la URL, mientras que los parámetros POST se envían en el cuerpo de la solicitud HTTP. POST es como GET con un segundo conjunto oculto de argumentos que no son visibles para el usuario. Es por eso que puede realizar una solicitud POST en una URL que contiene parámetros GET.
Para más detalles ver How are parameters sent in an HTTP POST request?

Aunque normalmente contienen marcadores URL, sino que también pueden contener (bookmarklets que se llaman así) código JavaScript y hay hacks para hacer marcadores que harían solicitud POST en lugar de GET.
Para más detalles ver How to save a bookmark in Firefox with POST data?

Cuestiones relacionadas