Max length of send() data param on XMLHttpRequest Post
Max length of send() data param on XMLHttpRequest Post
主流浏览器在XMLHttpRequest
的send方法中,对字符串数据的长度是否有限制有文档记录吗?
当数据超过约3k时,我在FireFox 3中使用JavaScript的XMLHttpRequest
发送Post请求时遇到了问题。我原以为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; } } }
根据XMLRPC规范,仅对整数和双精度数的大小有实际限制。
在XMLHttpRequest Post中,有一个问题是在发送数据时,send()方法的数据参数的最大长度限制是多少。这个问题的出现原因是根据XMLRPC规范,只有整数和双精度数有大小限制,而对于数据参数的长度并没有明确规定。
解决这个问题的方法是使用其他方式来发送大量数据,例如分片发送或使用其他更高级的网络协议。以下是一种可能的解决方法:
function sendLargeData(url, data) { // 分片发送数据 var chunkSize = 1024; // 每个分片的大小 var offset = 0; // 数据偏移量 while (offset < data.length) { var chunk = data.slice(offset, offset + chunkSize); // 获取当前分片的数据 var xhr = new XMLHttpRequest(); xhr.open("POST", url, false); xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(chunk); // 发送当前分片的数据 offset += chunkSize; // 更新偏移量 } }
使用上述代码,我们可以将大量数据分片发送,以避免超出send()方法的数据参数最大长度限制。
总结起来,XMLHttpRequest Post中的send()方法的数据参数的最大长度限制并没有明确规定。为了解决这个问题,我们可以采用分片发送或使用其他更高级的网络协议的方法来发送大量数据。以上是其中一种可能的解决方法。
根据上述内容,我们可以得出以下结论:最大长度取决于浏览器和Web服务器,例如,Apache HTTP服务器有一个LimitRequestBody指令,允许发送0字节到2GB的数据。
问题的原因:问题的原因是由于浏览器和Web服务器的限制,导致无法发送超过最大长度的数据。
解决方法:要解决这个问题,我们需要根据具体情况进行相应的调整。对于Apache HTTP服务器,可以通过修改LimitRequestBody指令的值来增加允许发送的数据长度。具体的修改方法可以参考Apache HTTP服务器文档中的说明,通过设置LimitRequestBody的值来增加数据的最大长度。
需要注意的是,不同的浏览器和Web服务器可能有不同的限制和配置方式,因此需要根据具体情况进行相应的调整和配置。
由于浏览器和Web服务器的限制,发送数据的最大长度有一定的限制。通过了解和修改相应的配置,可以解决这个问题。对于Apache HTTP服务器,可以通过修改LimitRequestBody指令的值来增加允许发送的数据长度。而对于其他浏览器和Web服务器,可能需要进行不同的配置和调整。