如何解决HTTP 414“请求URI太长”的错误?
我开发了一个PHP的Web应用程序。 我正在给用户一个更新多个问题的选项。 这样做,有时用户遇到这个错误。 有没有什么办法来增加在Apache的URL的长度?
在Apache下,限制是一个可configuration的值LimitRequestLine
。 如果您想要支持更长的请求URI,请将此值更改为大于默认值8190的值。 该值在/etc/apache2/apache2.conf中 。 如果不是,请在AccessFileName .htaccess
下添加一个新行( LimitRequestLine 10000
)。
但是,请注意,如果您真的遇到了这个限制,那么您可能会先滥用GET
。 你应该使用POST
来传输这种数据 – 特别是因为你甚至承认你正在使用它来更新值。 如果你检查上面的链接,你会注意到Apache甚至说:“在正常情况下,值不应该从默认值改变。
根据John的回答,我将GET请求改为POST请求。 它可以工作,而不必更改服务器configuration。 所以我去看看如何实现这一点。 以下页面很有帮助:
jQuery Ajax POST例子用PHP (注意清理发布的数据注释)和
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
基本上,区别在于GET请求在一个string中有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>'; ?>
我刚刚发送了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!"); });
摘自RFC 2616:超文本传输协议–HTTP / 1.1
POST方法用于请求源服务器接受请求中包含的实体作为Request-Line中Request-URI标识的资源的新下属。 POST被devise为允许统一的方法来覆盖以下function:
- 诠释现有资源;
- 向公告栏,新闻组,邮件列表或类似的文章组发布信息;
- 向数据处理过程提供一组数据,例如提交表单的结果 ;
- 通过追加操作扩展数据库。
我有一个简单的解决方法。
假设你的URI有一个太长的stringstringdata
。 您可以根据服务器的限制简单地将其分解成多个部分。 然后提交第一个,在我的情况下写一个文件。 然后提交下一个附加到以前添加的数据。
- 我应该为Sparkselect哪种types的集群?
- .htaccess:无效的命令“RewriteEngine”,可能是拼错的或由未包含在服务器configuration中的模块定义
- 从org.apache.http.HttpResponse获取HTTP代码
- “为什么Apache Harmony”或“如何在Android上使用Java 8”
- Spark:使用单键RDDjoin2元组密钥RDD的最佳策略是什么?
- 如何debuggingapache虚拟主机configuration?
- Apache Tomcat应用程序的默认会话超时
- 网站不存在a2ensite错误
- 为什么使用deflate而不是gzip来处理Apache提供的文本文件?