以前のバージョンの Internet Explorer は、2,083 文字を超える Web アドレスで鳴き声を上げていました ( http://support.microsoft.com/kb/208427を参照)。一方、Firefox、Opera、および Safari は、少なくとも 80,000 を処理できます。
バージョン 9 では多くの改善が行われています。URL の長さもその 1 つですか?
以前のバージョンの Internet Explorer は、2,083 文字を超える Web アドレスで鳴き声を上げていました ( http://support.microsoft.com/kb/208427を参照)。一方、Firefox、Opera、および Safari は、少なくとも 80,000 を処理できます。
バージョン 9 では多くの改善が行われています。URL の長さもその 1 つですか?
最も正確な答えではありませんが、アドレスバーに2083文字、リンクをたどると5165文字のように見えます。
(公式ではありません。41,000文字のURLをテストHTMファイルに接続し、Javascriptを使用してURLの長さを照会しました。)
アップデート:
テストを再現するには、HREF属性の長さが6000文字のアンカー要素を含むHTMLファイルを作成します。ブラウザでファイルを開き、リンクをクリックします。次に、コンソールを開いて確認しwindow.location.href.length
ます。
今日のIE9でのこの手順に従って、長さは5165文字として報告されます。アドレスバーから同じURLを手動でロードすると、2083文字が報告されます。
IEは、リクエストを送信する前にURLを切り捨てているようです。アンカーのHREF属性に24,000文字のURLを入力すると、IEはリンクをたどりますが、結果のページは5165文字のURLの長さを報告します。Chromeで同じリンクをたどると、テストサーバーからHTTP414応答が返されます。
Internet Explorer 9 の URL で 5120 文字を取得します。
決して決定的なテストではありませんが、以下はアンカー タグの href 属性の URL の長さを簡単にチェックする方法を示しています。
<html>
<head>
<script type="text/javascript">
function init() {
var anchor = document.getElementById('anc');
var valid = true;
var url = 'http://google.com/?search=';
var count = url.length;
while(valid) {
url = url + '1';
anchor.href = url;
count++;
valid = anchor.href == url;
if(count > 100000) {
alert('Test reached 100,000, stopping...');
valid = false;
}
}
alert('Complete, count = ' + count);
}
</script>
</head>
<body onload="init()">
<a id="anc" href="http://google.com/">Test</a>
</body>
</html>
'a'
ブラウザーが失敗するまでパラメーターに追加し続けるこのテストを作成しました
C#部分:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult ParamTest(string x)
{
ViewBag.TestLength = 0;
if (!string.IsNullOrEmpty(x))
{
System.IO.File.WriteAllLines("c:/result.txt",
new[] {Request.UserAgent, x.Length.ToString()});
ViewBag.TestLength = x.Length + 1;
}
return View();
}
意見:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
var text = "a";
for (var i = 0; i < parseInt(@ViewBag.TestLength)-1; i++) {
text += "a";
}
document.location.href = "http://localhost:50766/Home/ParamTest?x=" + text;
});
</script>
IISExpressと設定に制限を追加しまし た。applicationhost.config
web.config
maxQueryStringLength="32768"
設定にも追加
<headerLimits>
<add header="Content-type" sizeLimit="32768" />
</headerLimits>
これはまったく役に立ちませんでした。最終的に、ヘッダーからリファラーを削除するためにフィドラーを使用することにしました。
static function OnBeforeRequest(oSession: Session) {
if (oSession.url.Contains("localhost:50766")) {
oSession.RequestHeaders.Remove("Referer");
}
これはうまくいきました。
私が得たIE9で
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
4043