Internet Explorer 9 可以占用多长时间的 URL?
Posted
技术标签:
【中文标题】Internet Explorer 9 可以占用多长时间的 URL?【英文标题】:How long of a URL can Internet Explorer 9 take? 【发布时间】:2011-04-12 20:54:41 【问题描述】:过去版本的 Internet Explorer 在超过 2,083 个字符的网址上乱码(请参阅http://support.microsoft.com/kb/208427)。同时,Firefox、Opera 和 Safari 至少可以处理 80,000 个。
版本 9 带来了许多改进。 URL 长度是其中之一吗?
【问题讨论】:
属于 superuser.com @fahd 不,它不是 - 这是 Web 开发人员的基本信息 长度并不是最重要的......重要的是你如何使用它 - 服务器可能有一个小得多的限制来防止一些漏洞和未经授权的入侵。 @Archimedix 绝对。我并不是说 URL 长度超过几千字节是一件好事。但是知道 IE9 的限制在哪里是一个合理的问题。 IE9 有各种限制(地址栏、HREF、位置标头等)。 2083 个字符以下的 URL 可以在任何地方使用。可以解析和导航较长的 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 中点击相同的链接会导致来自我的测试服务器的 HTTP 414 响应。
【讨论】:
我之前没有在链接中看到任何关于 5150 上限的文档,但它肯定会解释我遇到的一些问题,因为我的链接中的 URL > 2083 个字符正在工作,但在放入时失败地址栏。这只是经验性的 - 您是否只是尝试更大的 URL 直到它们失败?【参考方案2】:我在 Internet Explorer 9 的网址中获得 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>
【讨论】:
听起来很合理 - IE9 发行说明包括以下内容:“IE9 改进了对“书签”的支持——放宽了 URL 长度限制。”遗憾的是没有具体细节。重新测试 - 页内 HREF 的最大长度不一定与浏览器将传输的 URL 的最大长度相同(例如,通过地址栏)。需要通过提交和检查服务器日志来进行验证,以查看在什么时候发生截断(或错误?)。谁有 IE9 的确切信息?【参考方案3】:I wrote this test that keeps 将'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>
我added additional limits to IISExpressapplicationhost.config
和web.config
设置maxQueryStringLength="32768"
。
还有Added 进行配置
<headerLimits>
<add header="Content-type" sizeLimit="32768" />
</headerLimits>
这根本没有帮助, 最后决定使用 fiddler 从 header 中删除 referer。
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
【讨论】:
以上是关于Internet Explorer 9 可以占用多长时间的 URL?的主要内容,如果未能解决你的问题,请参考以下文章
Internet Explorer 9 - 按比例调整图像大小
我可以强制 IE9 进入 Internet Explorer 9 标准模式吗