回答:
Apacheでは、制限は設定可能な値ですLimitRequestLine
。より長いリクエストURIをサポートする場合は、この値をデフォルトの8190より大きい値に変更します。値は/etc/apache2/apache2.confにあります。そうでない場合は、のLimitRequestLine 10000
下に新しい行()を追加しAccessFileName .htaccess
ます。
ただし、実際にこの制限に達している場合は、おそらくGET
最初から悪用していることに注意してください。POST
この種のデータを送信するには、を使用する必要があります。特に、値を更新するために使用していることを認めているからです。上記のリンクを確認すると、Apacheは「通常の状態では、値をデフォルトから変更しないでください」とさえ言っていることに気付くでしょう。
POST
。POSTの使用については、投稿されたばかりのフィールドを同じフォームに入力することを妨げるものは何もないため、それが何を意味するのかわかりません。
LimitRequestLine
httpd.confファイルのどこにも単語が見つからない場合は、自分で好きな場所に行を追加してください。例:LimitRequestLine 100000
Johnの回答に基づいて、GETリクエストをPOSTリクエストに変更しました。サーバー構成を変更することなく機能します。だから私はこれを実装する方法を探しに行きました。次のページが役に立ちました。
PHPでのjQuery Ajax POSTの例 (サニタイズされた投稿データの注釈に注意)
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
基本的に、GETリクエストはURLとパラメータを1つの文字列にしてから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文字以上送信しました。
簡単な回避策があります。
URIにstringdata
長すぎる文字列があるとします。サーバーの制限に応じて、単純にいくつかの部分に分割できます。次に、最初のファイルを送信します。私の場合は、ファイルを書き込みます。次に、次のものを送信して、以前に追加したデータに追加します。
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:Hypertext Transfer Protocol-HTTP / 1.1からの抜粋:
POSTのメソッドは、オリジンサーバがリクエストライン中のRequest-URIによって識別されるリソースの新しい従属として、リクエストに囲まれたエンティティを受け入れることを要求するために使用されます。POSTは、以下の機能をカバーする統一された方法を可能にするように設計されています。
- 既存のリソースの注釈。
- 掲示板、ニュースグループ、メーリングリスト、または同様の記事グループにメッセージを投稿する。
- フォームの送信結果などのデータブロックをデータ処理プロセスに提供する。
- 追加操作によるデータベースの拡張。