A principios de esta semana, tuve que hacer algo que parece una violación a la semántica. Dejame explicar.Semántica y limitaciones de HTTP GET y POST
que estaba haciendo una sencilla aplicación cliente AJAX, que era hacer una petición a un servicio con un determinado número de parámetros. Como toda la aplicación es básicamente de solo lectura, pensé que usar HTTP GET era el camino a seguir. Algunos de los parámetros que tuve que pasar eran simples (como el orden de clasificación o el número de página).
Sin embargo, uno de los parámetros requeridos podría ser de longitud variable, y esto me preocupaba. Como estaba codificando todos los parámetros en la cadena de consulta de la solicitud GET, me pareció que esto colocaba un upper limit of (roughly) 2000 characters for the request URL innecesario. Y a pesar de eso, no me gustó ver URLs de solicitud de 500 caracteres.
Por lo tanto, ya que una solicitud POST no tiene una limitación de esa manera, me decidí a cambiar. Pero esto no se siente bien. Tengo la impresión de que un POST denota modificación de datos, pero lo estoy usando para una simple solicitud de solo lectura.
¿Hay una mejor manera de hacerlo? Para realizar un GET, con muchos parámetros? He oído hablar de un método: donde realiza un POST preliminar de los parámetros , y luego realiza un GET. Pero esta técnica deja mucho que desear.
Pero mirando más allá de este caso concreto, lo son la semántica reales y las limitaciones de los métodos de petición HTTP? ¿Y por qué GET no admite ningún tipo de carga útil de parámetro? Usar la cadena de consulta en la URL casi me parece un truco.
¿Por qué siente ese puesto denota modificación de datos? –
@ConradFrix: Debido a su uso en formas de presentación, en la carga de archivos, y [. Generales acciones no idempotente] (http://en.wikipedia.org/wiki/POST_ (HTTP) #Affecting_server_state) – voithos
Si eres escribiendo una aplicación Ajax, ¿por qué te importa cuál es la longitud de la URL?También tenga en cuenta que el límite de 2000 caracteres se aplica únicamente a las URL del navegador, no a las solicitudes Ajax (como se indica en los comentarios del enlace que presentó). –