XMLHttpRequest Post上send()数据参数的最大长度
-
02-07-2019 - |
题
对于主要浏览器实现,您可以在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将禁用检查客户端请求正文大小。