О загрузочной системе URL
Это руководство описывает классы платформы Основы, доступные для взаимодействия с URLs и связи с серверами с помощью стандартных протоколов интернета. Вместе эти классы упоминаются как загрузочная система URL.
Загрузочная система URL является рядом классов и протоколов, позволяющих Вашему приложению получать доступ к содержанию, на которое ссылается URL. В основе этой технологии NSURL
класс, позволяющий Вашему приложению управлять URLs и ресурсами, к которым они обращаются.
Для поддержки того класса платформа Основы обеспечивает богатый набор классов, позволяющих Вам загрузить содержание URL, загрузить данные на серверы, управлять хранением cookie, управлять кэшированием ответа, обработать учетное хранение и аутентификацию специфичными для приложения способами, и записать расширения пользовательского протокола.
Загрузочная система URL предоставляет поддержку для доступа к ресурсам с помощью следующих протоколов:
Протокол передачи файлов (
ftp://
)Протокол передачи гипертекста (
http://
)Протокол передачи гипертекста с шифрованием (
https://
)Локальный файл URLs (
file:///
)Данные URLs (
data://
)
Это также прозрачно поддерживает оба прокси-сервера и шлюзы SOCKS с помощью установок системы пользователя.
Сразу
Загрузочная система URL включает классы, загружающие URLs вместе со многими важными классами помощника, работающими с теми классами загрузки URL для изменения их поведения. Главные классы помощника попадают в пять категорий: поддержка протоколов, аутентификация и учетные данные, хранение cookie, управление конфигурацией и управление кэшем.
Загрузка URL
Обычно используемые классы в загрузочной системе URL позволяют Вашему приложению получать содержание URL из источника. Можно получить то содержание во многих отношениях, в зависимости от требований приложения. API, который Вы выбираете, зависит от версии OS X или iOS Ваши цели приложения и хотите ли Вы получить данные как файл или в блоке памяти из данных:
В iOS 7 и позже или OS X v10.9 и позже,
NSURLSession
предпочтительный API для нового кода, выполняющего URL-запросы.Для программного обеспечения, которое должно поддерживать более старые версии OS X, можно использовать
NSURLDownload
загружать содержание URL к файлу на диске.Для программного обеспечения, которое должно поддерживать более старые версии iOS или OS X, можно использовать
NSURLConnection
загружать содержание URL к памяти. Можно тогда записать данные в диск в случае необходимости.
Определенные методы, которые Вы используете, зависят в основном от того, хотите ли Вы выбрать данные к памяти или загрузить его на диск.
Выбирающее содержание как данные (в памяти)
На высоком уровне существует два основных подхода для выборки данных 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 главу или главы:
Для использования
NSURLSession
класс для асинхронной выборки содержания URL к памяти или файлов загрузки к диску читайте Используя NSURLSession. Тогда считайте Жизненный цикл Сеанса URL для изучения подробно какNSURLSession
взаимодействует с его делегатами.Для использования
NSURLConnection
для асинхронной выборки содержания URL к памяти читайте Используя NSURLConnection.Для использования
NSURLDownload
для загрузки файлов асинхронно на диск читайте Используя NSURLDownload.
После чтения того или большего количества этих специфичных для API глав, необходимо также считать следующие главы, относящиеся ко всем трем APIs:
Кодирование Данных URL объясняет, как закодировать произвольные строки для создания их безопасными для использования в URL.
Обработка Перенаправлений и Других Изменений Запроса описывает опции, которые Вы имеете для реакции на изменение к Вашему URL-запросу.
Проверка Цепочки Запросов аутентификации и TLS описывает процесс для аутентификации Вашего соединения против защищенного сервера.
Понимание Доступа Кэша описывает, как соединение использует кэш во время запроса.
Cookie и Пользовательские протоколы объясняют классы, доступные для управления хранением cookie и поддержки пользовательских протоколов прикладного уровня.
См. также
Следующий пример кода доступен:
LinkedImageFetcher (OS X) и AdvancedURLConnections (iOS) использование
NSURLConnection
с пользовательской аутентификацией.SpecialPictureProtocol (OS X) и CustomHTTPProtocol (iOS) показывают, как реализовать пользовательское
NSURLProtocol
подкласс.QuickLookDownloader (в Библиотеке Разработчика Mac) использование
NSURLDownload
управлять загрузками файла с Интернета.