XMLHttpRequest Post上send()数据参数的最大长度
时间:2020-03-06 14:38:10 来源:igfitidea点击:
在主要浏览器实现中,可以在XMLHttpRequest的send方法中使用的字符串数据的长度是否有文档说明的最大值?
当数据超过大约3k时,我在FireFox 3中遇到了JavaScript XMLHttpRequest Post失败的问题。我以为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的默认限制。

