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

当数据超过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;
        }
    } 
}
有帮助吗?

解决方案

我认为最大长度不仅取决于浏览器,还取决于Web服务器。例如,Apache HTTP服务器具有 LimitRequestBody指令,允许从0字节到2GB的数据。

其他提示

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

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

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

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

语法:client_max_body_size size;

默认值:client_max_body_size 1m;

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top