Сколько времени URL-адрес может получить Internet Explorer 9?
Прошедшие версии Internet Explorer прорезались на веб-адресах длиной более 2083 символов (см. http://support.microsoft.com/kb/208427). Тем временем Firefox, Opera и Safari могут обрабатывать не менее 80 000.
В версии 9 реализовано много улучшений. Является ли длина URL одной из них?
Ответы
Ответ 1
Не самый точный ответ, но он выглядит как 2083 символа в адресной строке и 5165 символов, следующих по ссылке.
(Не является официальным каким-либо образом, просто подключил URL с 41 000 символов в тестовый HTM файл и использовал Javascript для запроса длины URL-адреса.)
Update:
Чтобы воспроизвести тест, создайте файл HTML с элементом привязки, атрибут HREF которого составляет 6000 символов. Откройте файл в своем браузере и нажмите ссылку. Затем откройте консоль и проверьте window.location.href.length
.
Следуя этой процедуре в IE9 сегодня, она сообщает длину как 5165 символов. Если я загружаю один и тот же URL вручную через адресную строку, он сообщает 2083 символа.
Для чего это стоит, IE, кажется, усекает URL перед отправкой запроса. Если я помещаю URL-адрес 24 000 символов в атрибут HREF-привязки, IE будет следовать за ссылкой, но на полученной странице указывается длина URL-адреса 5165 символов. Следуя той же ссылке в Chrome, вы получаете ответ HTTP 414 от моего тестового сервера.
Ответ 2
Я получаю 5120 символов в URL-адресе для Internet Explorer 9.
Отнюдь не окончательный тест, а следующий демонстрирует быструю проверку длины URL атрибута href в теге привязки.
<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>
Ответ 3
Я написал этот тест, который поддерживает при добавлении параметра 'a'
к параметру до тех пор, пока браузер не выполнит
Часть С#:
[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>
I добавлены дополнительные ограничения для настроек 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