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

URLが約4000文字を超える場合、Apacheは(要求ラインがcapped to 8190 bytesある)413 Entity Too Largeで応答します。

LimitRequestLineディレクティブを使用しても問題が解決しない場合は、絶対に大きなGETリクエストを送信する場合は、-D DEFAULT_LIMIT_REQUEST_LINE=some huge valueでApacheを再コンパイルする必要があります。

EDIT:〜4000文字のキャップについていくつかの考え:81908192 with two bytes reserved for the string terminatorのようにたくさん見えるので、DEFAULT_LIMIT_REQUEST_LINEはバイトではなく文字数で表現されているので、Apacheは、UCS-2またはストア要求ラインに類似を使用していることを良いチャンスがあります。

これは、要求ラインごとに4095文字の上限を与えます(つまり、最初のGETと最後のCR/LFのペアを考慮して、最大URL長は4079文字になります)。

2

URLの長さ〜4950文字の送信リクエスト。

これは、とにかくInternet Explorerにとっては多すぎます。 IIRCがGET要求のために4096バイトの制限を持っているOperaの場合もあります。

この量のデータにPOSTを使用する必要があります。

Maximum URL length is 2,083 characters in Internet Explorer

+0

ありがとう、ペッカ。これはクロールでは機能しません=== – whn

+0

'POST'は良いアイデアですが、クロスドメインリクエストでは動作しません。' JSONP'は 'GET'だけで動作します。 – travis

関連する問題