2011-01-28 34 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