Stworzyłem aplikację internetową w języku PHP. Daję użytkownikowi możliwość aktualizacji wielu problemów za jednym razem. Robiąc to, czasami użytkownik napotyka ten błąd. Czy istnieje sposób na zwiększenie długości adresu URL w Apache?
Stworzyłem aplikację internetową w języku PHP. Daję użytkownikowi możliwość aktualizacji wielu problemów za jednym razem. Robiąc to, czasami użytkownik napotyka ten błąd. Czy istnieje sposób na zwiększenie długości adresu URL w Apache?
Odpowiedzi:
Pod Apache, limit jest wartością konfigurowalny LimitRequestLine
. Zmień tę wartość na większą niż domyślna 8190, jeśli chcesz obsługiwać dłuższy identyfikator URI żądania. Wartość znajduje się w /etc/apache2/apache2.conf . Jeśli nie, dodaj nową linię ( LimitRequestLine 10000
) pod AccessFileName .htaccess
.
Pamiętaj jednak, że jeśli faktycznie osiągasz ten limit, prawdopodobnie GET
na początku nadużywasz . Powinieneś używać POST
do przesyłania tego rodzaju danych - zwłaszcza, że nawet przyznajesz, że używasz ich do aktualizowania wartości. Jeśli zaznaczysz powyższy link, zauważysz, że Apache mówi nawet „W normalnych warunkach wartość nie powinna być zmieniana z domyślnej”.
POST
. Nic w używaniu POST nie wyklucza wypełnienia tego samego formularza polami, które właśnie zostały wysłane, więc nie jestem pewien, co przez to rozumiesz.
LimitRequestLine
w swoim pliku httpd.conf, po prostu dodaj tę linię w dowolnym miejscu. Na przykład:LimitRequestLine 100000
Na podstawie odpowiedzi Johna zmieniłem żądanie GET na żądanie POST. Działa bez konieczności zmiany konfiguracji serwera. Zacząłem więc szukać, jak to zaimplementować. Pomocne były następujące strony:
Przykład jQuery Ajax POST z PHP (zwróć uwagę na uwagę dotyczącą czyszczenia opublikowanych danych) i
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
Zasadniczo różnica polega na tym, że żądanie GET ma adres URL i parametry w jednym ciągu, a następnie wysyła wartość null:
http.open("GET", url+"?"+params, true);
http.send(null);
podczas gdy żądanie POST wysyła adres URL i parametry w oddzielnych poleceniach:
http.open("POST", url, true);
http.send(params);
Oto działający przykład:
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>';
?>
Właśnie wysłałem ponad 12 000 znaków bez żadnych problemów.
Mam proste obejście.
Załóżmy, że Twój identyfikator URI zawiera stringdata
zbyt długi ciąg . Możesz po prostu podzielić go na kilka części w zależności od ograniczeń serwera. Następnie prześlij pierwszy, w moim przypadku do napisania pliku. Następnie prześlij kolejne, aby dołączyć do wcześniej dodanych danych.
Otrzymałem ten błąd po użyciu $ .getJSON () z JQuery. Właśnie zmieniłem post:
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!");
});
Fragment dokumentu RFC 2616: Hypertext Transfer Protocol - HTTP / 1.1 :
Metoda POST służy do żądania, aby serwer pochodzenia zaakceptował jednostkę zawartą w żądaniu jako nowego podwładnego zasobu określonego przez identyfikator żądania w wierszu żądania. POST został zaprojektowany, aby umożliwić jednolitą metodę obejmującą następujące funkcje:
- Opis istniejących zasobów;
- Wysyłanie wiadomości do tablicy ogłoszeń, grupy dyskusyjnej, listy mailingowej lub podobnej grupy artykułów;
- Udostępnienie bloku danych, np. Wynikającego z przesłania formularza, do procesu obsługi danych ;
- Rozszerzanie bazy danych poprzez operację dołączania.