too the song requested long limitrequestline length htaccess for exceeds error chrome php apache http-status-codes

php - requested - the uri string is too long song



¿Cómo puedo resolver un error HTTP 414 "Request URI too long"? (5)

Basado en la respuesta de John, cambié la solicitud GET a una solicitud POST. Funciona, sin tener que cambiar la configuración del servidor. Así que fui buscando cómo implementar esto. Las siguientes páginas fueron útiles:

jQuery Ajax POST ejemplo con PHP (Observe la observación de desinfección de datos publicados) y

http://www.openjs.com/articles/ajax_xmlhttp_using_post.php

Básicamente, la diferencia es que la solicitud GET tiene la url y los parámetros en una cadena y luego envía null:

http.open("GET", url+"?"+params, true); http.send(null);

mientras que la solicitud POST envía la url y los parámetros en comandos separados:

http.open("POST", url, true); http.send(params);

Aquí hay un ejemplo de trabajo:

ajaxPOST.html:

<html> <head> <script type="text/javascript"> function ajaxPOSTTest() { try { // Opera 8.0+, Firefox, Safari ajaxPOSTTestRequest = new XMLHttpRequest(); } catch (e) { // Internet Explorer Browsers try { ajaxPOSTTestRequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { ajaxPOSTTestRequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { // Something went wrong alert("Your browser broke!"); return false; } } } ajaxPOSTTestRequest.onreadystatechange = ajaxCalled_POSTTest; var url = "ajaxPOST.php"; var params = "lorem=ipsum&name=binny"; ajaxPOSTTestRequest.open("POST", url, true); ajaxPOSTTestRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); ajaxPOSTTestRequest.send(params); } //Create a function that will receive data sent from the server function ajaxCalled_POSTTest() { if (ajaxPOSTTestRequest.readyState == 4) { document.getElementById("output").innerHTML = ajaxPOSTTestRequest.responseText; } } </script> </head> <body> <button onclick="ajaxPOSTTest()">ajax POST Test</button> <div id="output"></div> </body> </html>

ajaxPOST.php:

<?php $lorem=$_POST[''lorem'']; print $lorem.''<br>''; ?>

Acabo de enviar más de 12,000 caracteres sin ningún problema.

Desarrollé una aplicación web PHP. Le doy una opción al usuario para actualizar múltiples problemas de una vez. Al hacerlo, a veces el usuario encuentra este error. ¿Hay alguna forma de aumentar la longitud de la URL en apache?


Recibí este error después de usar $ .getJSON () de JQuery. Acabo de cambiar a la publicación:

data = getDataObjectByForm(form); var jqxhr = $.post(url, data, function(){}, ''json'') .done(function (response) { if (response instanceof Object) var json = response; else var json = $.parseJSON(response); // console.log(response); // console.log(json); jsonToDom(json); if (json.reload != undefined && json.reload) location.reload(); $("body").delay(1000).css("cursor", "default"); }) .fail(function (jqxhr, textStatus, error) { var err = textStatus + ", " + error; console.log("Request Failed: " + err); alert("Fehler!"); });


Tengo una solución simple.

Supongamos que su URI tiene una cadena stringdata que es demasiado larga. Simplemente puede dividirlo en varias partes dependiendo de los límites de su servidor. Luego, envíe el primero, en mi caso, para escribir un archivo. Luego, envíe los siguientes para agregar a los datos agregados anteriormente.


Un extracto del RFC 2616: Protocolo de transferencia de hipertexto - HTTP / 1.1 :

El método POST se utiliza para solicitar que el servidor de origen acepte la entidad incluida en la solicitud como un nuevo subordinado del recurso identificado por el URI de solicitud en la línea de solicitud. POST está diseñado para permitir un método uniforme para cubrir las siguientes funciones:

  • Anotación de recursos existentes;
  • Publicar un mensaje en un tablero de anuncios, un grupo de noticias, una lista de correo o un grupo similar de artículos;
  • Proporcionar un bloque de datos, como el resultado de enviar un formulario, a un proceso de manejo de datos ;
  • Extender una base de datos a través de una operación de agregar.

En Apache, el límite es un valor configurable, LimitRequestLine . Cambie este valor a algo más grande que su valor predeterminado de 8190 si desea admitir un URI de solicitud más largo. El valor está en /etc/apache2/apache2.conf . De lo contrario, agregue una nueva línea ( LimitRequestLine 10000 ) en AccessFileName .htaccess .

Sin embargo, tenga en cuenta que si realmente está llegando a este límite, probablemente esté abusando de GET para empezar. Debe usar POST para transmitir este tipo de datos, especialmente dado que incluso admite que lo está usando para actualizar los valores. Si revisa el enlace de arriba, notará que Apache incluso dice "Bajo condiciones normales, el valor no debería cambiarse de los valores predeterminados".