自定义URL Scheme的最大URL长度

35

根据标题,使用自定义URL方案与应用程序时URL的最大长度是多少?

例如,如果我正在通过URL启动另一个应用程序,并使用以下内容传递数据:

myappscheme://some/path?data=0123456789ABCDEF

在URL被截断之前(或系统拒绝启动其他应用程序),该字符串可以有多长?


实际上的字符限制为2000个字符。 - msk
@MSK (1) 那是另一个问题,问的是“scheme”部分的长度;我问的是整个URL (2) 当你说“事实上”时,你的依据是什么? - Shaggy Frog
2
请查看此问题的答案:https://dev59.com/XHRC5IYBdhLWcg3wFM_W - msk
1
@MSK 我在谈论的是iOS上关于自定义URL Scheme的限制,而不是一般意义上的Web浏览器。那回答了一个不同的问题。 - Shaggy Frog
5个回答

30

很遗憾,似乎找不到答案。在我查阅的任何iOS文档中都没有明确定义max len。如MSK's链接所述,URL基础url长度有限制,而不是url的绝对字符长度。因此,大约2000个字符可能是一个安全的上限。

然而,在测试中似乎没有上限。我能够在iOS上使用长度为365,535个字符的URL而没有问题。但是苹果没有要求继续支持它,因此这是“自担风险”的。然而,基于许多应用程序正在使用它来在应用程序之间传输信息,包括大量数据,苹果可能会继续支持它,因为没有理由缩短长度。


6
我仍然能够发送超过1000万个字符的URL(iOS 13)。 - Nominalista
@Nominalista 耶稣,我真的很好奇你在做什么 o_O - zaitsman

12

(以下是另一个问题的答案的转载,但也直接回答了这里的问题。)

在苹果平台上(iOS/iPadOS/macOS/tvOS/watchOS),URL方案的长度限制为2 GB,这是从Swift源代码中的此注释中可以看到的:

// Make sure the URL string isn't too long.
// We're limiting it to 2GB for backwards compatibility with 32-bit executables using NS/CFURL
if ( (urlStringLength > 0) && (urlStringLength <= INT_MAX) )
{
...
在iOS上,我已经测试并确认即使是超过300MB的长URL也是可以被接受的。你可以尝试使用Objective-C来使用这样一个长的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;
}

@DustinKerstein 不,随意尝试并发布答案。 - Cœur

5

上面的答案有误导作用。文档中没有明确提到,但路径和文件名确实有长度限制。

您可以在这里看到文件路径或名称可以占用的长度限制。您可以在syslimits.h中检查这些限制。

#define NAME_MAX          255   /* max bytes in a file name */
#define PATH_MAX         1024   /* max bytes in pathname */

您可以像这样记录并查看它们:

NSLog(@"PATH MAX VALUE: %i", PATH_MAX)

路径长度限制为1024字节或1024个UTF-8字符。路径中的文件名长度限制为255字节或255个UTF-8字符。如果路径包含编码的日语字符(会显著增加URL/名称的长度),可能会遇到此问题。目前唯一的解决方案是裁剪名称。苹果支持页面上提到了某些语言(如韩语或日语)的字符占用更多的字节并引起问题,但并没有提供好的解决方法。具体请参考以下链接:https://support.apple.com/en-is/HT202808

1
这是关于文件名和文件路径长度限制的有用信息。但我们是否知道这会影响URL?许多URL不是指向本地文件的。即使是指向本地文件的URL也可能被API处理,而这些API受到与通过文件名和路径进行直接角色操作的API不同的限制。 - algal
@algal,据我所知,URL代表“统一资源定位符”。这里所涉及的资源是文件,因为您在操作系统环境中使用URL来定位文件,所以文件路径限制也适用于URL长度。不过,我的理解可能有误。 - yvanscher

5

我创建了一个简单的项目来测试长度限制,目前看来即使是1MB也没有问题。但显然不能依赖这个数字来预测未来。


在你回答之前一年多,我已经证明了 300 MB 完全可以,后来我发现上限是 2 GB。;) - Cœur

-2

参考 http://en.wikipedia.org/wiki/URI_scheme :

方案名由以字母开头并后跟任意组合的字母、数字、加号(“+”)、句点(“.”)或连字符(“-”)的字符序列组成。虽然方案不区分大小写,但规范形式是小写的,并且指定方案的文档必须使用小写字母来指定。方案名后面跟着一个冒号(“:”)。

没有关于长度的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接