带有大量参数的Ajax GET请求出错

时间:2011-01-28 14:49:51

标签: javascript jquery ajax

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

获取以下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. 

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

当参数数量小于〜200时,脚本可以工作,因此线索必须在某些限制内。另一方面,apache或php或js中没有任何设置。

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

2 个答案:

答案 0 :(得分:2)

  

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

无论如何,这对Internet Explorer来说太过分了。也可能是Opera,IIRC对GET请求的限制为4096字节。

您应该使用POST来获取此数据量。

Maximum URL length is 2,083 characters in Internet Explorer

答案 1 :(得分:0)

如果网址超过大约4000个字符(请求行为capped to 8190 bytes),Apache会回复413 Entity Too Large

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

编辑:关于~4000字符上限的一些想法:8190看起来很像8192 with two bytes reserved for the string terminator,所以Apache很有可能使用UCS-2或类似于商店请求行,因为DEFAULT_LIMIT_REQUEST_LINE以字节表示,而不是字符。

这会为每个请求行提供4095个字符的上限,即最大网址长度为4079个字符(考虑到最初的GET和最后的CR/LF对),这是有意义的。< / p>