【问题标题】:Max length of send() data param on XMLHttpRequest PostXMLHttpRequest Post 上的 send() 数据参数的最大长度
【发布时间】:2010-09-12 14:09:52
【问题描述】:

对于主要浏览器实现,您可以在XMLHttpRequest 的发送方法中使用的字符串数据的长度是否有文档记录?

当数据超过大约 3k 时,我遇到了 JavaScript XMLHttpRequest Post 在 FireFox 3 中失败的问题。我假设 Post 的行为与传统的 Form Post 相同。

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;
        }
    } 
}

【问题讨论】:

    标签: javascript ajax xmlhttprequest


    【解决方案1】:

    我相信最大长度不仅取决于浏览器,还取决于网络服务器。例如,Apache HTTP 服务器有一个LimitRequestBody directive,它允许从 0 字节到 2GB 的任何数据。

    【讨论】:

    【解决方案2】:

    根据XMLRPC spec,唯一真正的限制是整数和双精度数的大小。

    【讨论】:

      【解决方案3】:

      您没有指定它是如何失败的,但是您的编码不正确。您应该使用 encodeURIComponent 而不是 encodeURI。

      默认客户端上请求实体主体的最大大小可能仅受可用内存的限制。正如已经指出的那样,服务器可能会拒绝超过一定大小的实体主体。例如,IIS 6 和 7 有 200KB 的默认限制。

      【讨论】:

        【解决方案4】:

        Nginx 的配置必须在 client_max_body_size 完成,并且可以设置为任何值,例如 20m 用于 20MiB 或设置为 0 以禁用它。

        vim /etc/nginx/nginx.conf
        

        保存并关闭文件,将更改应用到 nginx.conf,然后测试 -t 并发送信号 -s 以重新加载:

        /usr/sbin/nginx -t
        /usr/sbin/nginx -s reload
        

        语法:client_max_body_size 大小;

        默认:client_max_body_size 1m;

        上下文:http、服务器、位置

        设置客户端请求正文的最大允许大小,在“Content-Length”请求标头字段中指定。如果请求中的大小超过配置的值,则会向客户端返回 413(请求实体太大)错误。请注意,浏览器无法正确显示此错误。将 size 设置为 0 将禁用对客户端请求正文大小的检查。

        【讨论】:

          猜你喜欢
          • 2012-12-03
          • 2011-03-05
          • 1970-01-01
          • 2015-06-12
          • 2015-07-18
          • 2012-02-12
          • 2017-12-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多