代码之家  ›  专栏  ›  技术社区  ›  kevink

XMLHttpRequest Post上send()数据参数的最大长度

  •  9
  • kevink  · 技术社区  · 16 年前

    是否有文档记录了可以在发送方法中使用的字符串数据的最大长度 XMLHttpRequest

    我遇到了一个JavaScript问题 XMLHttpRequest 当数据超过约3k时,在Firefox3中发布失败。我假设这个帖子的行为和传统的表单帖子一样。

    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 回复  |  直到 5 年前
        1
  •  7
  •   Zack The Human Kunal    16 年前

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

        2
  •  2
  •   Chris AtLee    16 年前

    XMLRPC spec ,唯一的实际限制是整数和double的大小。

        3
  •  2
  •   AnthonyWJones    16 年前

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

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

        4
  •  0
  •   Yones    6 年前

    Nginx的配置必须在 client_max_body_size 和ca可以设置为任何值,即对于20MiB,设置为20m或设置为0以禁用它。

    vim /etc/nginx/nginx.conf
    

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

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

    默认值:客户端\最大\主体\大小1m;

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