Пользовательская схема URL максимальная длина URL

Какова максимальная длина URL-адреса для заголовка при использовании пользовательской схемы URL-адреса с приложением?

Например, если я запускаю другое приложение через URL и передаю большой объем данных, используя что-то вроде

myappscheme:// некоторый / путь данных =0123456789abcdef

сколько времени может пройти эта строка, прежде чем URL будет обрезан (или система вообще отказывается запускать другое приложение)?

4 ответа

К сожалению, ответ, кажется, не доступен. Максимальная длина не определена конкретно в любой документации iOS, которую я мог найти.

Как указано выше в ссылке MSK, существуют ограничения для длины основного URL-адреса URL, а не абсолютной длины строки URL-адреса. Так что это, вероятно, безопасная ставка на максимум, около 2000 символов.

Однако в тестировании не было верхнего предела. Я смог без проблем использовать 365 535 символьных URL на iOS. Но Apple не обязана и впредь поддерживать его, так что это "использование на свой страх и риск". Однако я бы сказал, что на основании того факта, что многие приложения используют это для передачи информации, включая большие объемы данных между приложениями, Apple, вероятно, продолжит ее поддерживать, поскольку, как представляется, нет причин уменьшать длину,

(Ниже приводится репост из ответа на другой вопрос, но он также дает прямой ответ на этот вопрос.)

На платформах Apple (iOS/iPadOS/macOS/tvOS/watchOS) ограничение составляет схему URL длиной 2 ГБ, как видно из этого комментария в исходном коде 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 я протестировал и подтвердил, что допустимы даже URL-адреса длиной более 300 МБ. Вы можете попробовать такой длинный URL-адрес в Objective-C:

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;
}

Я создал простой проект для измерения предела, в настоящий момент кажется, что даже колоссальный мегабайт в порядке. Очевидно, не стоит полагаться на это число в будущем.

Ответы выше вводят в заблуждение. Документы не упоминают об этом, но пути и имена файлов имеют ограничения по длине.

Здесь вы можете увидеть ограничение длины пути или имени файла. Вы можете проверить это в 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/ имена). Мое единственное решение - обрезать имя на данный момент.

Вы можете увидеть здесь на этой странице поддержки Apple, что они говорят о том, что некоторые языки (например, корейский или японский) имеют символы, которые занимают больше байтов и вызывают проблемы (хотя на самом деле они не обеспечивают хороший способ решения проблемы):

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

Ссылка http://en.wikipedia.org/wiki/URI_scheme:

Имя схемы состоит из последовательности символов, начинающейся с буквы и сопровождаемой любой комбинацией букв, цифр, плюс ("+"), точки (".") Или дефиса ("-"). Несмотря на то, что схемы нечувствительны к регистру, каноническая форма написана строчными буквами, и документы, в которых указаны схемы, должны делать это строчными буквами. За ним следует двоеточие (":").

Там нет ничего о длине.

Другие вопросы по тегам