XMLHttpRequest enviando datos vía POST
- Por Larry Hans Arroyo Vargas
- Publicado 23.05.08
El día de hoy me levante con una firme determinación… Y era jugar futbolín y ver morir el viernes solucionar un problema que ayer me tuvo dos horas dándole vueltas, y con el que lamentablemente tuve que compartir la habitación esta madrugada.
Lo que sucedió era que estaba implementando un AJAX para alimentar los datos de un script PHP, y normalmente enviando los datos por GET, no había experimentado mayores problemas, no obstante en esta oportunidad la cantidad de bytes rebasaba por mucho la limitada capacidad del GET.
Antes de continuar, aclarare este punto para que lo tengamos de referencia…
¿Tiene límite el número de caracteres que se pueden pasar por GET ($_GET)?
En efecto así es. A mediados del año 1998 se hizo pública la especificación del protocolo HTTP, un documento bastante completo, pero impreciso en cuanto al límite máximo de los datos transferidos a través de GET, por lo que tiempo después los navegadores por si mismos han despachado sus propias especificaciones.
Destacamos los límites de los más populares:
mismo dependiendo de la plataforma y del servidor web, debemos considerar otros estándares, tales como por ejemplo:
Ahora; volviendo al tema en el que me levante esta mañana, les comento que es muy común en la vida de los desarrolladores profesionales que debido al cansancio físico y mental, en muchos casos podemos durar horas solucionando un problema, que en otras circunstancias solo nos tomaría algunos minutos.
En este caso no fue la excepción :-)
El código original que envía datos por GET es el siguiente:
Ahora, para que podamos enviar datos por POST, lo que debemos sumar es una cabecera de datos, como lo hago a continuación:
El problema radicaba en que para enviar datos por POST hay que enviar previamente una cabezera que nos permita almacenar los contenidos.
Lo que sucedió era que estaba implementando un AJAX para alimentar los datos de un script PHP, y normalmente enviando los datos por GET, no había experimentado mayores problemas, no obstante en esta oportunidad la cantidad de bytes rebasaba por mucho la limitada capacidad del GET.
Antes de continuar, aclarare este punto para que lo tengamos de referencia…
¿Tiene límite el número de caracteres que se pueden pasar por GET ($_GET)?
En efecto así es. A mediados del año 1998 se hizo pública la especificación del protocolo HTTP, un documento bastante completo, pero impreciso en cuanto al límite máximo de los datos transferidos a través de GET, por lo que tiempo después los navegadores por si mismos han despachado sus propias especificaciones.
Destacamos los límites de los más populares:
- Internet Explorer: 2.083 caracteres
- FireFox: 65.536 caracteres
- Safari: 80.000 caracteres
- Opera: 190.000 caracteres
- Apache: 4.000 caracteres
- Microsoft Internet Information Server (IIS): 16.384 caracteres.
Ahora; volviendo al tema en el que me levante esta mañana, les comento que es muy común en la vida de los desarrolladores profesionales que debido al cansancio físico y mental, en muchos casos podemos durar horas solucionando un problema, que en otras circunstancias solo nos tomaría algunos minutos.
En este caso no fue la excepción :-)
El código original que envía datos por GET es el siguiente:
xml.open('get', 'http://www.dominio.com/script.php?variable_get=hola');
xml.onreadystatechange = handleResults;
xml.send(null);
Ahora, para que podamos enviar datos por POST, lo que debemos sumar es una cabecera de datos, como lo hago a continuación:
xml.open('post', 'http://www.dominio.com/script.php?variable_get=hola');
xml.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
xml.send("variable_post=1&variable_post2=1");
El problema radicaba en que para enviar datos por POST hay que enviar previamente una cabezera que nos permita almacenar los contenidos.
