33

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

例如,如果我通过 URL 启动另一个应用程序,并使用类似的东西传递一个数据块

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

在 URL 被切断(或系统根本拒绝启动其他应用程序)之前,该字符串可以得到多长时间?

4

5 回答 5

29

不幸的是,答案似乎不可用。我能找到的任何 iOS 文档中都没有专门定义 max len。

正如上面 MSK 的链接所指出的,URL 基本 url 长度存在限制,而不是 url 的绝对字符串长度。因此,对于最多大约 2000 个字符,这可能是一个安全的选择。

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

于 2013-01-03T14:38:41.967 回答
7

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

在 Apple 平台 (iOS/iPadOS/macOS/tvOS/watchOS) 上,限制为2 GB长的 URL 方案,如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 上,我已经测试并确认即使是 300+ MB 长的 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;
}
于 2019-11-15T02:25:34.723 回答
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)

UTF-8 中的路径限制为 1024 个字节或 1024 个字符。路径中的文件名限制为 255 个字节或 UTF-8 中的 255 个字符。

我在尝试处理已编码日文字符的文件时遇到了这个问题(这会显着延长 URL/名称)。我唯一的解决方案是立即裁剪名称。

您可以在此 Apple 支持页面上看到他们谈论某些语言(如韩语或日语)的字符如何占用更多字节并导致问题(尽管它们并没有真正提供解决问题的好方法):

https://support.apple.com/en-is/HT202808

于 2015-08-25T23:29:42.657 回答
4

我创建了一个简单的项目来测量 limit,目前看来即使是巨大的兆字节也可以。显然,在未来依赖这个数字是不明智的。

于 2017-12-07T10:09:03.430 回答
-2

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

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

长度无关紧要。

于 2013-01-14T12:57:12.570 回答