我已经开发了一个PHP的网络应用程序。我给用户一个选项来更新多个问题一次去。在这样做的时候,有时候用户会遇到这个错误。有没有办法增加在Apache的URL的长度?
cgh8pdjw1#
在Apache下,此限制是一个可配置的值**LimitRequestLine**。如果要支持更长的请求URI,请将此值更改为大于其默认值8190的值。该值位于 /etc/apache 2/apache2.conf 中。否则,请在AccessFileName .htaccess下添加新行(LimitRequestLine 10000)。但是,请注意,如果您实际上遇到了这个限制,那么您可能一开始就在滥用GET。您应该使用POST来传输这类数据--特别是在您承认使用它来更新值之后。如果您查看上面的链接,您会注意到Apache甚至说“在正常情况下,不应该更改默认值”。
LimitRequestLine
AccessFileName .htaccess
LimitRequestLine 10000
GET
POST
pn9klfpd2#
根据John的回答,我将GET请求更改为POST请求。它可以工作,而不必更改服务器配置。因此,我开始研究如何实现它。以下页面很有帮助:jQuery Ajax POST example with 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多个字符,没有任何问题。
r55awzrz3#
我有一个简单的解决方法。假设您的URI中有一个字符串stringdata,它太长了,您可以根据服务器的限制将其分解为多个部分,然后提交第一个部分(在我的例子中是写一个文件),然后提交下一个部分以附加到先前添加的数据中。
stringdata
x7rlezfr4#
我在使用$.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!"); });
rlcwz9us5#
摘自**RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1:**
POST方法用于请求源服务器接受请求中包含的实体,作为请求行中请求URI所标识资源的新从属实体。POST设计为允许统一方法涵盖以下功能:
7fyelxc56#
我在使用Postman测试woocommerce rest API时也遇到了这个错误。问题是因为授权数据是在请求正文中发送的。当我在标题中发送它们时,问题就解决了。
6条答案
按热度按时间cgh8pdjw1#
在Apache下,此限制是一个可配置的值**
LimitRequestLine
**。如果要支持更长的请求URI,请将此值更改为大于其默认值8190的值。该值位于 /etc/apache 2/apache2.conf 中。否则,请在AccessFileName .htaccess
下添加新行(LimitRequestLine 10000
)。但是,请注意,如果您实际上遇到了这个限制,那么您可能一开始就在滥用
GET
。您应该使用POST
来传输这类数据--特别是在您承认使用它来更新值之后。如果您查看上面的链接,您会注意到Apache甚至说“在正常情况下,不应该更改默认值”。pn9klfpd2#
根据John的回答,我将GET请求更改为POST请求。它可以工作,而不必更改服务器配置。因此,我开始研究如何实现它。以下页面很有帮助:
jQuery Ajax POST example with PHP(注意清理已发布数据备注)和
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
基本上,不同之处在于GET请求在一个字符串中包含url和参数,然后发送null:
而POST请求在单独的命令中发送url和参数:
下面是一个工作示例:
ajaxPOST.html:
ajaxPOST.php:
我刚刚发送了12,000多个字符,没有任何问题。
r55awzrz3#
我有一个简单的解决方法。
假设您的URI中有一个字符串
stringdata
,它太长了,您可以根据服务器的限制将其分解为多个部分,然后提交第一个部分(在我的例子中是写一个文件),然后提交下一个部分以附加到先前添加的数据中。x7rlezfr4#
我在使用$.getJSON()后得到这个错误。我只是改为发布:
rlcwz9us5#
摘自**RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1:**
POST方法用于请求源服务器接受请求中包含的实体,作为请求行中请求URI所标识资源的新从属实体。POST设计为允许统一方法涵盖以下功能:
*向数据处理过程提供数据块,例如提交表格的结果;
7fyelxc56#
我在使用Postman测试woocommerce rest API时也遇到了这个错误。
问题是因为授权数据是在请求正文中发送的。当我在标题中发送它们时,问题就解决了。