如何解决 HTTP 414“请求 URI 太长”错误?

2022-08-30 07:14:07

我开发了一个PHP网络应用程序。我为用户提供了一个选项,可以一次更新多个问题。在这样做时,有时用户会遇到此错误。有没有办法增加apache中URL的长度?


答案 1

在Apache下,限制是一个可配置的值,LimitRequestLine。如果要支持更长的请求 URI,请将此值更改为大于其默认值 8190 的值。该值位于 /etc/apache2/apache2.conf 中。如果没有,请在 下添加一个新行 ()。LimitRequestLine 10000AccessFileName .htaccess

但是,请注意,如果您实际遇到此限制,则可能一开始就滥用了。你应该用它来传输这类数据 - 特别是因为你甚至承认你正在使用它来更新值。如果您检查上面的链接,您会注意到Apache甚至说“在正常情况下,该值不应从默认值更改。GETPOST


答案 2

根据 John 的回答,我将 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个字符,没有任何问题。


推荐