10

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

XMLHttpRequest当数据超过大约 3k 时,我遇到了一个 JavaScript 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;
        }
    } 
}
4

4 回答 4

8

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

于 2008-09-24T00:41:05.353 回答
2

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

于 2008-09-24T00:44:47.577 回答
2

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

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

于 2008-09-25T12:53:34.523 回答
0

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 将禁用对客户端请求正文大小的检查。

于 2019-01-27T20:46:01.073 回答