2011-01-28 35 views
0

发送URL长度约为4950个字符的请求。带有大量参数的Ajax GET请求出错

得到以下XMLHTTPRequest.ResponseText:

ERROR 
The requested URL could not be retrieved 

While trying to retrieve the URL: ##my long url## 
The following error was encountered: 
Invalid URL 
Some aspect of the requested URL is incorrect. Possible problems: 
Missing or incorrect access protocol (should be `http://'' or similar) 
Missing hostname 
Illegal double-escape in the URL-Path 
Illegal character in hostname; underscores are not allowed 
Your cache administrator is webmaster. 

但是当我在浏览器中输入相同的URL,它工作得很好。我检查了可能的错误(在响应文本中列出) - 一切正常。

当参数的数量少于200时,脚本就起作用,所以线索必须在一定范围内。另一方面,在apache或php或js中没有任何设置。

任何建议或我应该在哪里看(解决方案的一些额外的配置或其他)?

回答

0

阿帕奇与413 Entity Too Large如果URL超过大约4000个字符(请求线是capped to 8190 bytes)应答。

使用LimitRequestLine指令将无济于事,如果您绝对想要发送大量GET请求,则必须重新编译Apache以-D DEFAULT_LIMIT_REQUEST_LINE=some huge value

编辑:关于〜4000字帽的几点思考:8190看起来很像8192 with two bytes reserved for the string terminator,所以有一个很好的机会,Apache使用UCS-2或类似的存储请求线,因为DEFAULT_LIMIT_REQUEST_LINE是以字节为单位,而不是以字符表示。

这将为每个请求行提供4095个字符的上限,即最大URL长度为4079个字符(考虑到最初的GET和最终的CR/LF对),这是合理的。

2

发送URL长度〜4950个字符的请求。

这对于Internet Explorer来说太多了。也可能用于Opera,IIRC对于GET请求有4096个字节的限制。

您应该使用POST处理这些数据量。

Maximum URL length is 2,083 characters in Internet Explorer

+0

谢谢Pekka。只是为了记录:它在Chrome中也不起作用=) – whn 2011-01-28 15:00:58