Ho sviluppato un'app Web PHP. Sto dando la possibilità all'utente di aggiornare più problemi in una volta sola. In tal modo, a volte l'utente incontra questo errore. C'è un modo per aumentare la lunghezza dell'URL in Apache?
Ho sviluppato un'app Web PHP. Sto dando la possibilità all'utente di aggiornare più problemi in una volta sola. In tal modo, a volte l'utente incontra questo errore. C'è un modo per aumentare la lunghezza dell'URL in Apache?
Risposte:
Sotto Apache, il limite è un valore configurabile, LimitRequestLine
. Modificare questo valore in qualcosa di più grande del valore predefinito di 8190 se si desidera supportare un URI di richiesta più lungo. Il valore è in /etc/apache2/apache2.conf . In caso contrario, aggiungi una nuova riga ( LimitRequestLine 10000
) sotto AccessFileName .htaccess
.
Tuttavia, tieni presente che se stai effettivamente raggiungendo questo limite, probabilmente stai abusando GET
per cominciare. Dovresti usarlo POST
per trasmettere questo tipo di dati, soprattutto perché ammetti persino di usarlo per aggiornare i valori. Se controlli il collegamento sopra, noterai che Apache dice anche "In condizioni normali, il valore non dovrebbe essere modificato rispetto a quello predefinito".
POST
. Niente sull'utilizzo di POST ti impedisce di compilare lo stesso modulo con i campi che sono stati appena pubblicati, quindi non sono sicuro di cosa intendi con questo.
LimitRequestLine
nessuna parte nel tuo file httpd.conf, aggiungi semplicemente la riga dove preferisci. Ad esempio:LimitRequestLine 100000
In base alla risposta di John, ho modificato la richiesta GET in una richiesta POST. Funziona, senza dover modificare la configurazione del server. Quindi sono andato a cercare come implementarlo. Le seguenti pagine sono state utili:
jQuery Ajax POST esempio con PHP (nota il commento di sanitize sui dati pubblicati) e
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
Fondamentalmente, la differenza è che la richiesta GET ha l'URL ei parametri in una stringa e quindi invia null:
http.open("GET", url+"?"+params, true);
http.send(null);
mentre la richiesta POST invia l'url ei parametri in comandi separati:
http.open("POST", url, true);
http.send(params);
Ecco un esempio funzionante:
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>';
?>
Ho appena inviato oltre 12.000 caratteri senza problemi.
Ho una soluzione semplice.
Supponi che il tuo URI abbia una stringa stringdata
troppo lunga. Puoi semplicemente suddividerlo in un numero di parti a seconda dei limiti del tuo server. Quindi invia il primo, nel mio caso per scrivere un file. Quindi invia i successivi da aggiungere ai dati aggiunti in precedenza.
Ho ricevuto questo errore dopo aver utilizzato $ .getJSON () da JQuery. Ho appena cambiato per postare:
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!");
});
Un estratto dalla RFC 2616: Hypertext Transfer Protocol - HTTP / 1.1 :
Il metodo POST viene utilizzato per richiedere che il server di origine accetti l'entità racchiusa nella richiesta come nuovo subordinato della risorsa identificata dall'URI della richiesta nella riga della richiesta. POST è progettato per consentire un metodo uniforme per coprire le seguenti funzioni:
- Annotazione delle risorse esistenti;
- Invio di un messaggio a una bacheca, un newsgroup, una mailing list o un gruppo di articoli simile;
- Fornire un blocco di dati, come il risultato dell'invio di un modulo, a un processo di trattamento dei dati ;
- Estensione di un database tramite un'operazione di accodamento.