每个浏览器的URL的最大长度是什么?

最大 URL 长度是 HTTP 规格的一部分吗?


当前回答

为什么Internet Explorer仅限于2K,而IIS则限于16K?我不认为有意义。

所以我想开始一个关于Ajax要求URL大小限制的实验。

我设置了我的Tomcat HTTP连接器的maxHttpHeaderSize="1048576". 并准备了一个非常长的URL。

然后我发送一个请求与长的URL如下:

var url="/ajax/url-length.jsp";
jQuery.ajax(url,{data:{q:"0".repeat(1048000-url.length-4)}});

jQuery 报告完成. Tomcat 报告所要求的 URL 是 1048015 位元. 它是用 Chrome 50 和 Internet Explorer 11 测试的。

因此,网页浏览器不会故意在发送 Ajax 请求时破坏或限制您的 URL。

其他回答

似乎Chrome至少已经提高了这个限制,我把2万个字符插入了书架上,它拿走了。

HTTP 1.1 规格说:

HTTP 中的 URI 可以以绝对的形式或与某些已知基础的 URI 相对,取决于它们的使用背景。 两种形式因绝对的 URI 总是以一个序列名称开始而有所区别。 有关 URL 合成和序列的最终信息,请参见“统一资源识别器(URI):通用序列和序列”。

正如 @Brian 提到的那样, HTTP 客户端(例如浏览器)可能有自己的限制,而 HTTP 服务器则会有不同的限制。

更长的答案 - 首先,标准...

建议所有 HTTP 发送者和接收者支持,至少,请求线长度为 8000 位元。

事实上,在 boutell.com 上有一篇文章(链接到 Internet Archive 备份)讨论了个人浏览器和服务器实施将支持什么。

(注:这是2006年写的一篇文章的引用,但2015年 IE 的使用量下降意味着更长的 URL 为多数工作。

Internet Explorer 的限制

还有一些研究从2010年到搜索引擎将浏览和索引的最大 URL 长度. 他们发现的限制是 2047 台,看起来与 Sitemap 协议规格相关联. 然而,他们也发现谷歌 SERP 工具不会处理超过 1855 台的 URL。

(信用到 timrs2998 提供此信息在评论中)

浏览器 Roundup

Browser     Address bar   document.location
                          or anchor tag
------------------------------------------
Chrome          32779           >64k
Android          8192           >64k
Firefox          >64k           >64k
Safari           >64k           >64k
IE11             2047           5120
Edge 16          2047          10240

此外,请参见下面的答案来自Matas Vaitkevicius。

Sitemaps 协议是网站管理员如何向搜索引擎提供有关其网站页面的信息(谷歌在 Webmaster Tools 中也使用),支持不到 2048 个字符的 URL. 因此,如果您计划使用此功能为搜索引擎优化,请注意。

在 Apple 平台(iOS/macOS/tvOS/watchOS)上,限制可能是一个 2 GB 长的 URL 格式,如此评论所示,在 Swift 的源代码中:

// 确保 URL 行不太长. // 我们将其限制到 2GB 以使用 NS/CFURL 使用 32 位执行器的背后兼容性,如果((urlStringLength > 0) && (urlStringLength <= INT_MAX) ) {...


在 iOS 上,我已经测试并确认,即使是300MB以上长的URL也被接受。

NSString *path = [@"a:" stringByPaddingToLength:314572800 withString:@"a" startingAtIndex:0];
NSString *js = [NSString stringWithFormat:@"window.location.href = \"%@\";", path];
[self.webView stringByEvaluatingJavaScriptFromString:js];

如果成功,就抓住:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"length: %@", @(request.URL.absoluteString.length));
    return YES;
}