对于主要浏览器实现,您可以在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;
}
}
}
答案 0 :(得分:5)
我认为最大长度不仅取决于浏览器,还取决于Web服务器。例如,Apache HTTP服务器有LimitRequestBody directive,允许从0字节到2GB的数据。
答案 1 :(得分:2)
根据XMLRPC spec,唯一真正的限制是整数和双精度的大小。
答案 2 :(得分:2)
您没有指定它的失败方式,但编码不正确。你应该使用encodeURIComponent而不是encodeURI。
默认情况下,客户端上请求实体主体的最大大小可能仅受可用内存的限制。已经指出的服务器可以拒绝超过特定大小的实体主体。例如,IIS 6和7具有200KB的默认限制。
答案 3 :(得分:0)
必须在client_max_body_size处进行Nginx的配置,并且可以将其设置为任意值,例如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大小;
默认值:client_max_body_size 1m;
上下文:http,服务器,位置
设置客户端请求正文的最大允许大小,在“ Content-Length”请求标头字段中指定。如果请求中的大小超过配置的值,则会向客户端返回413(请求实体太大)错误。请注意,浏览器无法正确显示此错误。将size设置为0将禁用对客户端请求正文大小的检查。