Comment résoudre une erreur HTTP 414 "Request URI too long"?
j'ai développé une application web PHP. Je donne une option à l'utilisateur pour mettre à jour plusieurs problèmes en une seule fois. Ce faisant, l'Utilisateur rencontre parfois cette erreur. Y a-t-il un moyen d'augmenter la longueur D'URL dans apache?
5 réponses
sous Apache, la limite est une valeur configurable, LimitRequestLine
. Changez cette valeur en quelque chose de plus grand que sa valeur par défaut de 8190 si vous voulez supporter un URI de requête plus long. La valeur est dans /etc/apache2/apache2.conf . Dans la négative, ajouter une nouvelle ligne ( LimitRequestLine 10000
) sous AccessFileName .htaccess
.
cependant, notez que si vous êtes effectivement dans cette limite, vous abusez probablement GET
pour commencer avec. Vous devriez utiliser POST
pour transmettre ce genre de données-d'autant plus que vous admettez même que vous l'utilisez pour mettre à jour les valeurs. Si vous cochez le lien ci-dessus, vous remarquerez Qu'Apache dit même "dans des conditions normales, la valeur ne doit pas être modifiée par rapport à la valeur par défaut."
basé sur la réponse de John, j'ai changé la requête GET en une requête POST. Cela fonctionne, sans devoir changer la configuration du serveur. Alors j'ai cherché comment mettre en œuvre ça. Les pages suivantes ont été utiles:
jQuery Ajax POST example with PHP (Veuillez noter la remarque concernant les données postées de sanitize) et
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
Fondamentalement, la différence est que la requête GET A l'url et les paramètres dans une chaîne et envoie ensuite null:
http.open("GET", url+"?"+params, true);
http.send(null);
alors que la requête POST envoie l'url et les paramètres dans des commandes séparées:
http.open("POST", url, true);
http.send(params);
voici un exemple pratique:
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>';
?>
je viens d'envoyer plus de 12 000 caractères sans aucun problème.
j'ai eu cette erreur après avoir utilisé $.getJSON () de JQuery. Je viens de changer pour poster:
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 extrait du RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1 :
la méthode POST est utilisée pour demander que le serveur d'origine accepte entité incluse dans la requête comme des subalternes de la ressource identifié par L'URI de la demande dans la ligne de la demande. POST est conçu pour permettre à une méthode uniforme de couvrir les fonctions suivantes:
- Annotation de ressources existantes;
- affichage d'un message sur un babillard, un groupe de discussion, une liste de diffusion, ou un groupe similaire d'articles;
- fournir un bloc de données, tel que le résultat de la soumission d'un formulaire, à un traitement de données ;
- extension D'une base de données par une opération d'ajout.
j'ai une solution simple.
supposons que votre URI a une chaîne de caractères stringdata
qui est trop longue. Vous pouvez simplement le fractionner en plusieurs parties selon les limites de votre serveur. Puis soumettre le premier, dans mon cas pour écrire un dossier. Soumettez ensuite les données suivantes à ajouter aux données précédemment ajoutées.