О загрузочной системе URL

Это руководство описывает классы платформы Основы, доступные для взаимодействия с URLs и связи с серверами с помощью стандартных протоколов интернета. Вместе эти классы упоминаются как загрузочная система URL.

Загрузочная система URL является рядом классов и протоколов, позволяющих Вашему приложению получать доступ к содержанию, на которое ссылается URL. В основе этой технологии NSURL класс, позволяющий Вашему приложению управлять URLs и ресурсами, к которым они обращаются.

Для поддержки того класса платформа Основы обеспечивает богатый набор классов, позволяющих Вам загрузить содержание URL, загрузить данные на серверы, управлять хранением cookie, управлять кэшированием ответа, обработать учетное хранение и аутентификацию специфичными для приложения способами, и записать расширения пользовательского протокола.

Загрузочная система URL предоставляет поддержку для доступа к ресурсам с помощью следующих протоколов:

Это также прозрачно поддерживает оба прокси-сервера и шлюзы SOCKS с помощью установок системы пользователя.

Сразу

Загрузочная система URL включает классы, загружающие URLs вместе со многими важными классами помощника, работающими с теми классами загрузки URL для изменения их поведения. Главные классы помощника попадают в пять категорий: поддержка протоколов, аутентификация и учетные данные, хранение cookie, управление конфигурацией и управление кэшем.

The URL loading system class hierarchy

Загрузка URL

Обычно используемые классы в загрузочной системе URL позволяют Вашему приложению получать содержание URL из источника. Можно получить то содержание во многих отношениях, в зависимости от требований приложения. API, который Вы выбираете, зависит от версии OS X или iOS Ваши цели приложения и хотите ли Вы получить данные как файл или в блоке памяти из данных:

Определенные методы, которые Вы используете, зависят в основном от того, хотите ли Вы выбрать данные к памяти или загрузить его на диск.

Выбирающее содержание как данные (в памяти)

На высоком уровне существует два основных подхода для выборки данных URL:

  • Для простых запросов используйте NSURLSession API для получения содержания от NSURL возразите непосредственно, любой как NSData возразите или как файл на диске.

  • Для более сложных запросов — запрашивает те данные загрузки, например — обеспечивают NSURLRequest объект (или его непостоянный подкласс, NSMutableURLRequest) к NSURLSession или NSURLConnection.

Независимо от которого подхода Вы выбираете, Ваше приложение может получить данные ответа двумя способами:

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

  • Предоставьте пользовательскому делегату. Класс загрузки URL периодически вызывает Ваши методы делегата, поскольку он получает данные от инициирующего источника. Ваше приложение ответственно за накопление тех данных в случае необходимости.

В дополнение к самим данным класс загрузки URL предоставляет Вашему делегату или блоку обработчика завершения с объектом ответа, инкапсулирующим метаданные, связанные с запросом, таким как тип MIME и длина содержания.

Загрузка содержания как файл

На высоком уровне существует два основных подхода для загрузки содержания URL к файлу:

  • Для простых запросов используйте NSURLSession API для получения содержания от NSURL возразите непосредственно, любой как NSData возразите или как файл на диске.

  • Для более сложных запросов — запрашивает те данные загрузки, например — обеспечивают NSURLRequest объект (или его непостоянный подкласс, NSMutableURLRequest) к NSURLSession или NSURLDownload.

NSURLSession класс обеспечивает два значительных преимущества перед NSURLDownload класс: это доступно в iOS, и загрузки могут продолжаться в фоновом режиме, в то время как Ваше приложение приостановлено, завершено или разрушено.

Классы помощника

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

URL-запросы

NSURLRequest объект инкапсулирует URL и любые специфичные для протокола свойства независимым от протокола способом. Это также указывает политику относительно использования любых локально кэшированных данных, и, когда используется с NSURLConnection или NSURLDownload, обеспечивает интерфейс для установки тайм-аута соединения. (Для NSURLSession, тайм-ауты сконфигурированы на основе на сеанс.)

Некоторые протоколы поддерживают специфичные для протокола свойства. Например, протокол HTTP добавляет методы к NSURLRequest тот возврат организация Запроса HTTP, заголовки и метод передачи. Это также добавляет методы к NSMutableURLRequest установить те значения.

Подробные данные работы с объектами URL-запроса описаны всюду по этой книге.

Метаданные ответа

Ответ от сервера до запроса может быть просмотрен как две части: метаданные, описывающие содержание и сами данные содержания. Метаданные, которые характерны для большинства протоколов, инкапсулируются NSURLResponse класс и состоит из типа MIME, ожидал длину содержания, текст, кодирующий (где применимо) и URL, обеспечивший ответ. Специфичные для протокола подклассы NSURLResponse может обеспечить дополнительные метаданные. Например, NSHTTPURLResponse хранит заголовки и код состояния, возвращенный веб-сервером.

Подробные данные работы с объектами ответа URL описаны всюду по этой книге.

Перенаправление и другие изменения запроса

Некоторые протоколы, такие как HTTP, обеспечивают путь к серверу, чтобы сказать Вашему приложению, что содержание переместилось в различный URL. Классы загрузки URL могут уведомить своих делегатов, когда это происходит. Если Ваше приложение обеспечивает надлежащий метод делегата, Ваше приложение может тогда решить, следовать ли за перенаправлением, возвратите организацию ответа из перенаправления или возвратите ошибку.

Аутентификация и учетные данные

Некоторые серверы ограничивают доступ к определенному содержанию, требуя, чтобы пользователь аутентифицировал путем обеспечения своего рода учетных данных — клиентского сертификата, имени пользователя и пароля, и т.д. — для получения доступа. В случае веб-сервера ограниченное содержание сгруппировано в область, требующую единственного набора учетных данных. Учетные данные (сертификаты, в частности) также используются для определения доверия другому направлению — чтобы оценить, должно ли приложение доверять серверу.

Загрузочная система URL обеспечивает классы, что учетные данные модели и защитили области, а также обеспечение безопасной учетной персистентности. Ваше приложение может указать, что эти учетные данные сохраняются для единственного запроса на время запуска приложения, или постоянно в цепочке для ключей пользователя.

NSURLCredential класс инкапсулирует учетные данные, состоящие из информации аутентификации (имя пользователя и пароль, например) и поведение персистентности. NSURLProtectionSpace класс представляет область, требующую определенных учетных данных. Пространство защиты может быть ограничено единственным URL, охватить область на веб-сервере, или относиться к прокси.

Совместно используемый экземпляр NSURLCredentialStorage класс управляет учетным хранением и обеспечивает отображение NSURLCredential возразите против соответствия NSURLProtectionSpace объект, для которого это обеспечивает аутентификацию.

NSURLAuthenticationChallenge класс инкапсулирует требуемую информацию NSURLProtocol реализация для аутентификации запроса: предложенные учетные данные, включенное пространство защиты, ошибка или ответ, что протокол, используемый, чтобы решить, что аутентификация требуется, и число предпринятых попыток аутентификации. NSURLAuthenticationChallenge экземпляр также указывает объект, инициировавший аутентификацию. Инициирующий объект, называемый отправителем, должен соответствовать NSURLAuthenticationChallengeSender протокол.

NSURLAuthenticationChallenge экземпляры используются NSURLProtocol подклассы, чтобы сообщить загрузочной системе URL, что требуется аутентификация. Их также предоставлены для методов делегата NSURLConnection и NSURLDownload это упрощает настроенную обработку аутентификации.

Управление кэшем

Загрузочная система URL обеспечивает составное дисковое и разрешение в кэше памяти приложения сократить его зависимость от сетевого соединения и обеспечить более быстрый благоприятный поворот для ранее кэшируемых ответов. Кэш сохранен на основе на приложение. Кэш запрашивается NSURLConnection согласно политике кэша, указанной инициированием NSURLRequest объект.

NSURLCache класс обеспечивает методы для конфигурирования размера кэша и его расположения на диске. Это также обеспечивает методы для управления набором NSCachedURLResponse объекты, содержащие кэшируемые ответы.

NSCachedURLResponse объект инкапсулирует NSURLResponse возразите и данные содержания URL. NSCachedURLResponse также обеспечивает пользовательский информационный словарь, который Ваше приложение может использовать для кэширования любых пользовательских данных.

Не все реализации протокола поддерживают кэширование ответа. В настоящее время только http и https запросы кэшируются.

NSURLConnection объект может управлять, кэшируется ли ответ и должен ли ответ кэшироваться только в памяти путем реализации connection:willCacheResponse:метод делегата.

Хранение cookie

Вследствие природы не сохраняющей состояние протокола HTTP клиенты часто используют cookie для обеспечения персистентного хранения данных через URL-запросы. Загрузочная система URL обеспечивает интерфейсы, чтобы создать и управлять cookie, отправить cookie как часть Запроса HTTP и получить cookie при интерпретации ответа веб-сервера.

OS X и iOS обеспечивают NSHTTPCookieStorage класс, поочередно обеспечивающий интерфейс для управления набором NSHTTPCookie объекты. В OS X хранение cookie совместно используется через все приложения; в iOS хранение cookie на приложение.

Поддержка протоколов

Загрузочная система URL исходно поддерживает http, https, file, ftp, и data протоколы. Однако загрузочная система URL также позволяет Вашему приложению регистрировать Ваши собственные классы для поддержки дополнительных сетевых протоколов прикладного уровня. Можно также добавить специфичные для протокола свойства к URL-запросу и объектам ответа URL.

Как использовать этот документ

Этот документ в основном разделен, на основе которой загрузки URL классифицируют главу, описывает. Для решения который API использовать считайте Загрузку URL. После решения, который API Вы хотите использовать, считайте надлежащую специфичную для API главу или главы:

После чтения того или большего количества этих специфичных для API глав, необходимо также считать следующие главы, относящиеся ко всем трем APIs:

См. также

Следующий пример кода доступен: