¿Cómo funciona una solicitud POST?

En primer lugar, la explicación de Saifur Rahman Mohsin fue absolutamente brillante. Restauraré su respuesta con pocos ejemplos.

Recientemente estoy trabajando en un proyecto que necesita más comprensión simplemente diseñando un sitio web. Necesitaba entender cómo van mis datos al servidor. ¿Cómo se ve? Entonces, después de una búsqueda profunda, descubrí (aprendí) lo que necesitaba aprender. Así que voy a compartir mi conocimiento al respecto aquí.

En primer lugar, cuando envío datos al servidor, por ejemplo, tengo un formulario de inicio de sesión que tiene un campo de correo electrónico y contraseña y un envío. Cuando hace clic en el botón Enviar, el navegador creará una solicitud HTTP para usted según el método que especifique.

Para más claridad de las cosas, aquí hay un fragmento.

Aquí MÉTODO representa qué tipo de método HTTP está utilizando. Hay varios métodos HTTP disponibles como GET, POST, PUT, DELETE. Para la mayoría de los casos, solo se utilizarán los métodos GET y POST. Y GET es el método predeterminado, si no mencionó el método exclusivamente en la etiqueta del formulario.

Vayamos al punto, donde deberíamos ver cómo funciona POST. Asume el código anterior. Que estamos enviando datos del formulario al servidor utilizando el método POST. Básicamente, cuando hace clic en el botón Enviar, su navegador creará una Solicitud HTTP y una vez que se autentique desde el servidor, recibirá la Respuesta HTTP del servidor.

Técnicamente, HTTP Request and Response tiene dos cosas, encabezado HTTP y cuerpo HTTP si su método es POST. SI es GET, solo tendrá un encabezado HTTP.

Entonces, ¿ qué es el encabezado y el cuerpo HTTP? Lo que tiene

Te explicaré con un ejemplo. Estoy usando un software de análisis de paquetes de código abierto llamado Wireshark · Go Deep. Es una herramienta brillante para saber más sobre cómo se envían las solicitudes y cómo se reciben las respuestas. Puede usar las Herramientas para desarrolladores de Google para ver cosas básicas. Pero si quieres una mejor comprensión. Prueba ese software.

Ahora, creé una página ficticia con el código que le mostré arriba y la envié al servidor usando el método POST. Así es como se envió mi solicitud.

(tomado de Wireshark)

POST / api / 2 / users / login / HTTP / 1.1

Anfitrión: 192.168.52.166:6000

Longitud del contenido: 48

Control de caché: max-age = 0

Origen: http: // localhost
Usuario-Agente: Mozilla / 5.0 (X11; Linux x86_64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 54.0.2840.90 Safari / 537.36

Tipo de contenido: application / x-www-form-urlencoded

Aceptar: text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, * / *; q = 0.8

Referer: http: //localhost/app/login.html

Idioma de aceptación: en-US, en; q = 0.8, ca; q = 0.6

Aceptar-Codificación: gzip

correo electrónico = emjimadhu% 40email.com y contraseña = qwerty123

Esta es la solicitud HTTP que estoy enviando al servidor utilizando el método POST. La mayoría de los campos se explican por sí mismos. Pero te diré lo que tú qué.

Primero, ¿cuál es el encabezado y el cuerpo HTTP de lo anterior?

El encabezado HTTP es de la línea 1 a la 11, que es de POST / api / 2 / login / HTTP / 1.1 a Accept-Encoding: gzip. Los campos entre estos dos son Encabezado HTTP.

POST / api / 2 / users / login / HTTP / 1.1

La POST muestra que estoy enviando un formulario con el método POST Http. Si está enviando un formulario con GET, le mostrará GET en lugar de POST.

El siguiente / api / 2 / users / login / representa la url de “acción” que estoy haciendo. Aquí voy a enviar los datos del formulario a una página que se encuentra en / api / 2 / users / login / para verificar.

El HTTP / 1.1 se refiere al protocolo y la versión del mismo.

El resto de los demás campos son autoexplicativos.

HTTP Body es el mensaje que está enviando al servidor. Aquí estamos enviando valores de correo electrónico y contraseña al servidor.

correo electrónico = emjimadhu% 40email.com y contraseña = qwerty123

Cuando envíe datos, sus valores se codificarán en la estructura de URL. En el ejemplo anterior, no estamos enviando valores sin procesar al servidor. En cambio, lo estamos enviando en el formato URLEncoded.

Si es una solicitud GET en lugar de POST. Tendrá el mismo encabezado de solicitud HTTP. Pero no tendrá el cuerpo de solicitud HTTP. En cambio, todos sus valores están incrustados en su url.

Por ejemplo,

http://abc.com/login.html?email%3Demjimadhu%40email.com%26password%3Dqwerty123

Eso es todo. Espero que hayas conseguido lo que necesitabas.

Recursos:

  1. Wireshark · Profundiza.
  2. Referencia de codificación de URL HTML

Hay una estructura para tal solicitud como se define en el RFC 2616 que explicaré en un minuto. Pero por ahora, para hacerle entender cómo funciona, me gustaría que realice una secuencia de pasos que describo. Primero abra google chrome, haga clic derecho, presione inspeccionar elemento y elija “Net” en las pestañas. Ahora abra fb.com. Cierre sesión y luego presione el botón Borrar en la pestaña de red para asegurarse de que esté vacío.

Hit F5 ..!
Mostrará algunas búsquedas de página y luego, cuando haga clic en uno de los archivos en la ventana del inspector de red, verá el método GET junto con los valores que se transfirieron.

Ahora borre todo nuevamente y luego esta vez inicie sesión en su FB con la ventana del inspector de red abierta. Vuelva a revisar los archivos y busque algo como /login.php. Debería mostrarle una solicitud POST cuando inspeccione el archivo. Tenga en cuenta que los encabezados y los valores son diferentes para POST en comparación con el GET anterior. En GET, simplemente puede pasar los valores en la propia URL solicitante, pero en POST espera y confirma que los datos son correctos.

Puede intentar el mismo experimento un poco avanzado en un servidor web utilizando el cliente telnet. Básicamente, estos son comandos que usarías …
OBTENER /example.php?data=value HTTP / 1.0

¡Y el archivo se recupera inmediatamente cuando presionas enter ..!

POST, por otro lado, requiere que use este formato de datos.

POST /example.php HTTP / 1.0
Anfitrión: localhost
Tipo de contenido: application / x-www-form-urlencoded
Longitud del contenido: 11
Nombre = mi nombre

Cuando los navegadores se crean utilizando un lenguaje de programación, generalmente la parte de la solicitud que solicita el recurso se agrega a la barra de direcciones junto con la URL base. Echa un vistazo a la codificación de Firefox si estás ansioso por ver (pero debo advertirte, buscarlo será un dolor). ¡Esto es una desventaja ya que hace que GET sea inseguro ya que es visible en el navegador tal como está …! Cualquier intento de compartir la URL podría exponerlo y hackearlo. Es por eso que los formularios se envían utilizando el método POST. Este método es muy seguro, ya que no solo lo oculta para que no aparezca en la barra de direcciones, sino que también requiere que el software del navegador elimine los campos del formulario, calcule la longitud total y lo agregue al encabezado como longitud del contenido para hacer una POST legítima solicitud…!

Espero que esto sea suficiente para explicar. Para una comprensión más profunda, le sugiero que lea los RFC

El valor se almacena en la solicitud.

Las solicitudes HTTP consisten en algunos componentes clave. Principalmente:

1) Dirección
2) encabezados
3) cuerpo
La diferencia clave entre un GET y un POST en este caso es que un GET no tiene cuerpo. Por lo tanto, cualquier dato que desee incluir en un GET debe incluirse en la Dirección. Un POST, sin embargo, tiene un cuerpo. E incluye los pares clave / valor para los valores en ese cuerpo.

Eche un vistazo a las herramientas de depuración de su navegador y examine las solicitudes / respuestas cuando interactúe con el servidor. Para una solicitud POST, verá que de hecho puede inspeccionar los valores. (Lo que quizás desee considerar cuando hable acerca de conocer la “seguridad” de estas solicitudes …)

Los valores no están “almacenados” en ningún lugar especial. Funcionan casi exactamente como lo hacen en una solicitud GET. Simplemente están en otra parte del formato de solicitud.

La publicación envía datos para ser procesados ​​en el recurso identificado. Los datos se incluyen en el cuerpo de la solicitud. Esto puede resultar en la creación de una nueva respuesta y si la solicitud no se procesa con éxito, responderá con errorResponse.