Как устранить ошибку HTTP 414 «Запрос слишком длинный URI»? - PullRequest
93 голосов
/ 23 мая 2010

Я разработал веб-приложение на PHP.Я даю пользователю возможность обновить сразу несколько проблем.При этом иногда пользователь сталкивается с этой ошибкой.Есть ли способ увеличить длину URL в apache?

Ответы [ 5 ]

148 голосов
/ 23 мая 2010

В Apache предел является настраиваемым значением, LimitRequestLine. Измените это значение на что-то большее, чем его значение по умолчанию 8190, если вы хотите поддерживать более длинный URI запроса. Значение находится в / etc / apache2 / apache2.conf . Если нет, добавьте новую строку (LimitRequestLine 10000) в поле AccessFileName .htaccess.

Тем не менее, обратите внимание, что если вы на самом деле достигаете этого предела, вы, вероятно, злоупотребляете GET для начала. Вы должны использовать POST для передачи такого рода данных - тем более что вы даже признаете, что используете его для обновления значений. Если вы проверите ссылку выше, вы заметите, что Apache даже говорит: «В нормальных условиях значение не должно изменяться по умолчанию».

13 голосов
/ 30 апреля 2014

На основании ответа Джона я изменил запрос GET на запрос POST. Работает без изменения конфигурации сервера. Итак, я посмотрел, как это реализовать. Следующие страницы были полезны:

Пример jQuery Ajax POST с PHP (Обратите внимание на примечание о проведенной дезинфекции) и

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

По сути, разница в том, что запрос GET имеет URL-адрес и параметры в одной строке, а затем отправляет ноль:

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 символов без проблем.

3 голосов
/ 16 ноября 2016

Я получил эту ошибку после использования $ .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!");
    });
2 голосов
/ 04 сентября 2012

У меня есть простой обходной путь.

Предположим, в вашем URI слишком длинная строка stringdata.Вы можете просто разбить его на несколько частей в зависимости от ограничений вашего сервера.Затем отправьте первый, в моем случае, чтобы написать файл.Затем отправьте следующие, чтобы добавить к ранее добавленным данным.

1 голос
/ 23 мая 2010

Выдержка из RFC 2616: протокол передачи гипертекста - HTTP / 1.1 :

Метод POST используется для запроса, чтобы исходный сервер принял сущность, заключенная в запросе в качестве нового подчиненного ресурса идентифицируется Request-URI в строке запроса. POST разработан чтобы единообразный метод охватывал следующие функции:

  • Аннотация существующих ресурсов;
  • Размещение сообщения на доске объявлений, в группе новостей, списке рассылки, или аналогичная группа статей;
  • Предоставление блока данных, например, результата отправки форма, к процессу обработки данных ;
  • Расширение базы данных с помощью операции добавления.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...