Я розробив веб-додаток PHP. Я даю можливість користувачеві оновлювати декілька проблем за один раз. Роблячи це, іноді користувач стикається з цією помилкою. Чи є спосіб збільшити довжину URL-адреси в апачі?
Я розробив веб-додаток PHP. Я даю можливість користувачеві оновлювати декілька проблем за один раз. Роблячи це, іноді користувач стикається з цією помилкою. Чи є спосіб збільшити довжину URL-адреси в апачі?
Відповіді:
Під Apache, межа настроюється значення, LimitRequestLine
. Змініть це значення на щось більше, ніж за замовчуванням 8190, якщо ви хочете підтримати довший URI запиту. Значення знаходиться в /etc/apache2/apache2.conf . Якщо ні, додайте новий рядок ( LimitRequestLine 10000
) під AccessFileName .htaccess
.
Однак зауважте, що якщо ви насправді стикаєтесь з цією межею, ви, мабуть, зловживаєте GET
для початку. Ви повинні використовувати POST
для передачі подібного роду дані, тим більше, що ви навіть визнаєте, що використовуєте їх для оновлення значень. Якщо ви перевірте посилання вище, ви помітите, що Apache навіть каже: "У звичайних умовах значення не слід змінювати з типових".
POST
. Ніщо про використання POST не перешкоджає заповненню тієї самої форми з опублікованими полями, тому я не впевнений, що ви маєте на увазі під цим.
LimitRequestLine
ніде у вашому файлі httpd.conf, просто додайте рядок самостійно куди завгодно. Наприклад:LimitRequestLine 100000
На основі відповіді Джона я змінив GET-запит на POST-запит. Він працює, не змінюючи конфігурацію сервера. Тому я пішов шукати, як це здійснити. Наступні сторінки були корисними:
jQuery Ajax приклад POST з PHP (зверніть увагу на санітоване розміщення зауважень даних) та
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
По суті, різниця полягає в тому, що GET-запит має URL-адреси та параметри в одній рядку, а потім надсилає null:
http.open("GET", url+"?"+params, true);
http.send(null);
тоді як POST-запит надсилає URL та параметри в окремі команди:
http.open("POST", url, true);
http.send(params);
Ось робочий приклад:
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>';
?>
Я щойно надсилав понад 12 000 символів без жодних проблем.
У мене просте вирішення.
Припустимо, у вашого URI stringdata
є занадто довга рядок . Ви можете просто розбити його на декілька частин залежно від меж вашого сервера. Потім подайте перший, в моєму випадку - написати файл. Потім подайте наступні, щоб додати до раніше доданих даних.
Я отримав цю помилку після використання $ .getJSON () від JQuery. Я щойно змінив публікацію:
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!");
});
Уривок з RFC 2616: протокол передачі гіпертексту - HTTP / 1.1 :
Метод POST використовується для запиту, щоб сервер-джерело прийняв сутність, включену в запит, як новий підлеглий ресурс, ідентифікований URI-запитом у рядку запиту. POST розроблений таким чином, щоб дозволити єдиний метод охопити наступні функції:
- Анотація наявних ресурсів;
- Розміщення повідомлення на дошці оголошень, групі новин, списку розсилки чи подібній групі статей;
- Надання блоку даних, наприклад результату подання форми, до процесу обробки даних ;
- Розширення бази даних за допомогою операції додавання.