nodejs - http post example
¿Por qué no se deberían modificar los datos en una solicitud HTTP GET? (7)
Sé que usar métodos que no sean GET (POST, PUT, DELETE) para modificar los datos del servidor es la manera correcta de hacer las cosas. Puedo encontrar varios recursos que afirman que las solicitudes GET no deben cambiar los recursos en el servidor.
Sin embargo, si un cliente se acercara a mí hoy y dijera: "No me importa cuál es la manera correcta de hacer las cosas, es más fácil para nosotros usar su API si solo podemos usar las URL de llamadas y recuperar algo de XML". no queremos tener que crear solicitudes HTTP y POST / PUT XML, "¿qué razones conducentes a los negocios podría darles para convencerlos de lo contrario?
¿Hay implicaciones de almacenamiento en caché? ¿Temas de seguridad? Estoy buscando algo más que "no tiene sentido semántico" o "hace que las cosas sean ambiguas".
Editar:
Gracias por las respuestas hasta ahora con respecto a la captación previa. No me preocupa tanto la captación previa, ya que se trata principalmente del uso de la API de red interna circundante y las páginas HTML no visitables que tendrían enlaces que un navegador podría extraer previamente.
Estoy buscando algo más que "no tiene sentido semántico" o "hace que las cosas sean ambiguas".
...
No me importa cuál es la manera correcta de hacer las cosas, es más fácil para nosotros
Dígales que piensen en la peor API que hayan usado. ¿No pueden imaginar cómo fue causado por un truco rápido que se extendió?
Será más fácil (y más barato) en 2 meses si comienzas con algo que tiene sentido semánticamente. Lo llamamos "El camino correcto" porque facilita las cosas, no porque queremos torturarte.
¿Qué hay de Google encontrar un enlace a esa página con todos los parámetros GET en la URL y volver a visitarlo de vez en cuando? Eso podría llevar a un desastre.
Hay un artículo divertido sobre esto en The Daily WTF .
Buenas razones para hacerlo de la manera correcta ...
Son estándares de la industria, están bien documentados y son fáciles de asegurar. Si bien es totalmente compatible con hacer la vida lo más fácil posible para el cliente, no desea implementar algo que sea más fácil a corto plazo, con preferencia a algo que no sea tan fácil para ellos, pero que ofrezca beneficios a largo plazo.
Una de mis citas favoritas
Rápido y sucio ... mucho después de que Quick haya partido de los restos sucios.
Para ti este es un "Un punto en el tiempo salva nueve";)
Los GET pueden forzarse en un usuario y dar como resultado la Falsificación de solicitudes entre sitios (CSRF). Por ejemplo, si tiene una función de cierre de sesión en http://example.com/logout.php , que cambia el estado del servidor del usuario, una persona malintencionada podría colocar una etiqueta de imagen en cualquier sitio que use la URL anterior como fuente : http://example.com/logout.php . Cargar este código provocaría que el usuario se desconectara. No es un gran problema en el ejemplo dado, pero si fuera un comando para transferir fondos de una cuenta, sería un gran problema.
Seguridad para uno. ¿Qué sucede si un rastreador web se encuentra con un enlace de eliminación o se engaña a un usuario para que haga clic en un hipervínculo? Un usuario debe saber lo que está haciendo antes de hacerlo realmente.
Seguridad: CSRF es mucho más fácil en las solicitudes GET.
El uso de POST no lo protegerá de todos modos, pero GET puede conducir a una explotación y explotación masiva mediante el uso de foros y lugares que aceptan etiquetas de imagen.
Dependiendo de lo que haga en el servidor, usar GET puede ayudar al atacante a iniciar DoS (denegación de servicio) . Un atacante puede enviar spam a miles de sitios web con su costosa solicitud GET en una etiqueta de imagen y cada visitante de esos sitios web llevará a cabo esta costosa solicitud GET contra su servidor web. Lo cual le causará muchos ciclos de CPU.
Soy consciente de que algunas páginas son pesadas de todos modos y esto siempre es un riesgo, pero es un riesgo mayor si agrega 10 registros grandes en cada solicitud GET.
- Prefetch: muchos navegadores web usarán la captación previa. Lo que significa que cargará una página antes de hacer clic en el enlace. Anticipando que harás clic en ese enlace más adelante.
- Bots: hay varios bots que escanean e indexan Internet para obtener información. Solo emitirán solicitudes GET. No desea eliminar algo de una solicitud GET por este motivo.
- Almacenamiento en caché: las solicitudes GET HTTP no deben cambiar de estado y deben ser idempotentes. Idempotente significa que emitir una solicitud una vez o emitirla varias veces da el mismo resultado. Es decir, no hay efectos secundarios. Por esta razón, las solicitudes HTTP GET están estrechamente vinculadas al almacenamiento en caché.
- El estándar HTTP lo dice : el estándar HTTP dice para qué sirve cada método HTTP. Varios programas están diseñados para usar el estándar HTTP, y suponen que lo usará de la forma en que se supone que debe hacerlo. Entonces, si no sigue, tendrá un comportamiento indefinido de una serie de programas aleatorios.