我已经开发了一个 PHP 网络应用程序。我给用户一个选项,以更新多个问题的一去。这样做时,用户有时会遇到此错误。有什么办法可以增加网址的长度在阿帕奇?
在 Apache 下,限制是一个可配置的值 LimitRequestLine。如果希望支持更长的请求 URI,请将此值更改为大于默认值8190的值。值在 /etc/apache2/apache2.conf中。如果没有,在 AccessFileName .htaccess下面添加一个新行(LimitRequestLine 10000)。
LimitRequestLine
AccessFileName .htaccess
LimitRequestLine 10000
但是,请注意,如果您实际上正在运行到这个限制,那么您可能从一开始就在滥用 GET。您应该使用 POST来传输这类数据——特别是因为您甚至承认正在使用它来更新值。如果检查上面的链接,您会注意到 Apache 甚至说: “在正常情况下,值不应该从默认值更改。”
GET
POST
摘自 Rfc2616: 超文本传输协议—— HTTP/1.1
职位方法用于请求原始服务器接受 作为资源的一个新的从属实体包含在请求中 由请求行中的 Request-URI 标识 使统一方法能够涵盖下列职能: 现有资源的注释; 向公告板、新闻组、邮件列表发布消息, 或类似组别的物品; 提供数据块,例如提交 表单,到一个数据处理过程 ; 通过追加操作扩展数据库。
职位方法用于请求原始服务器接受 作为资源的一个新的从属实体包含在请求中 由请求行中的 Request-URI 标识 使统一方法能够涵盖下列职能:
我有个简单的解决办法。
假设您的 URI 有一个太长的字符串 stringdata。您可以根据服务器的限制将其分成若干部分。然后提交第一个,在我的情况下写一个文件。然后提交下一个附加到以前添加的数据。
stringdata
Based on John's answer, I changed the GET request to a POST request. It works, without having to change the server configuration. So I went looking how to implement this. The following pages were helpful:
JQueryAjaxPOST 示例与 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);
下面是一个可行的例子:
返回文章页面
<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>'; ?>
我刚刚发送了超过12000个字符,没有任何问题。
在使用来自 JQuery 的 $. getJSON ()之后,我得到了这个错误:
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!"); });