10

XMLHttpRequest主要なブラウザ実装のsendメソッドで使用できる文字列データの長さの文書化された最大値はありますか?

XMLHttpRequestデータが約3kを超えると、FireFox3でJavaScript投稿が失敗するという問題が発生しています。投稿は従来のフォーム投稿と同じように動作すると想定していました。

W3Cのドキュメントには、sendメソッドのデータパラメータがDOMStringであると記載されていますが、主要なブラウザがそれをどのように実装しているかはわかりません。

これが私のJavaScriptの簡略版です。bigTextが約3kを超えると失敗し、それ以外の場合は機能します...

var xhReq = createXMLHttpRequest();

function createXMLHttpRequest() {
  try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
  try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
  try { return new XMLHttpRequest(); } catch(e) {}
  alert("XMLHttpRequest not supported");
  return null;
}

function mySubmit(id, bigText) {
  var url    = "SubmitPost.cfm";
  var params = "id=" + id + "&bigtext=" + encodeURI(bigText);

  xhReq.open("POST", url, true);

  //Send the header information along with the request
  xhReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhReq.setRequestHeader("Content-length", params.length);
  xhReq.setRequestHeader("Connection", "close");

  xhReq.onreadystatechange = onPostSubmit;
  xhReq.send(params);
}

function onPostSubmit() {

  if (xhReq.readyState==4 || xhReq.readyState=="complete")
     { 
     if (xhReq.status != 200)
        {
        alert('BadStatus');
        return;
        }
    } 
}
4

4 に答える 4

8

最大長はブラウザだけでなくWebサーバーにも依存すると思います。たとえば、Apache HTTPサーバーにはLimitRequestBodyディレクティブがあり、0バイトから2GB相当のデータを許可します。

于 2008-09-24T00:41:05.353 に答える
2

XMLRPC仕様によると、実際の制限は整数と倍精度のサイズのみです。

于 2008-09-24T00:44:47.577 に答える
2

どのように失敗するかは指定しませんが、エンコーディングが正しくありません。encodeURI ではなく、encodeURIComponent を使用する必要があります。

クライアントのリクエスト エンティティ ボディのデフォルトの最大サイズは、使用可能なメモリによってのみ制限される可能性があります。すでに指摘したように、サーバーは特定のサイズを超えるエンティティ ボディを拒否する場合があります。たとえば、IIS 6 および 7 には 200KB の既定の制限があります。

于 2008-09-25T12:53:34.523 に答える