El sistema de càrrega d'adreces URL és un conjunt de classes i protocols que proporcionen la capacitat subjacent per a que una aplicació accedeixi a les dades especificades per una URL.
Aquestes classes entren dins de cinc categories: càrrega d'URL, gestió de memòria clau, autenticació i credencials, emmagatzemament de cookie i el suport al protocol.
Figura 1: La jerarquia de classes del sistema de càrrega d'adreces URL

La majoria de les classes més utilitzades en el sistema de càrrega de URL permet que una aplicació creï una petició per al contingut d'una URL i la descarregui des de l'origen.
Una petició pels continguts d'una URL és representada per un objecte NSURLReques. L'NSURLRequest encapsula una URL i qualsevol propietat específica del protocol, d'una forma independent del protocol. També proporciona una interfície per indicar el temps d'espera per una connexió i especifica la política per utilitzar qualsevol dada en la memòria cau local. L'NSMutableURLRequest proporciona un sub-classe mutable de NSURLRequest que permet a una aplicació client alterar una petició existent.
| Nota: Quan una aplicació client inicia una connexió o descàrrega utilitzant una instància de NSMutableURLRequest, un copia completa es realitza de la petició. Els canvis fan que la petició inicial no tingui efectes un cop una descàrrega d'hagi inicialitzat. |
Els protocols, com l'HTTP, que permeten propietats específiques del protocol han de crear categories en l'NSURLRequest i NSMutableURLRequest per proporcionar accessos per a aquestes propietats. Per exemple, el protocol HTTP afegeix mètodes a l'NSURLRequest que retornen el cos de la petició HTTP, les capçaleres i el mètode de transmissió. També afegeix mètodes a l'NSMutableURLRequest per possar els valors corresponents. Els mètodes per posar i obtenir els valors de les propietats en aquests accessos s'exposen en la classe NSURLProtocol.
La resposta d'un servidor a una petició pot ser visualitzada en dues parts; les metadades que descriuen el contingut i les dades del contingut de la URL. La metadada que és comuna en la majoria de protocols està encapsulada per la classe NSURLResponse i consisteix d'un tipus MIME, la longitud del contingut esperat, la codificació del text (si és aplicable), i la URL que proporciona la resposta. Els protocols poden crear sub-classes de NSURLResponse per emmagatzemar les metadates específiques del protocol. L'NSURLHTTPResponse, per exemple, emmagatzema les capçaleres i el codi d'estat retornat per el servidor web.
| Nota: És important recordar que només les metadades de la resposta s'emmagatzemem en un objecte NSURLResponse. Una instància NSCachedURLResponse s'utilitza per encapsular un NSURLResponse, les dades del contingut de la URL i qualsevol informació proporcionada per l'aplicació. Mireu Gestió de la Memòria Cau per més detalls. |
Els classes NSURLConnection i NSURLDownload proporcionen la interfície per fer una connexió específica a un objecte NSURLRequest i descarregar els continguts. L'NSURLConnection proporciona les dades pel delegat que es rebut de la font original, mentre que l'NSURLDownload escriu les dades de la petició directament al disc. Ambdues classes proporcionen suport estès al delegat per respondre a les redireccions, desafiament d'autenticació i condicions d'error.
L'NSURLConnection proporciona un mètode delegar que permet a una aplicació controlar els canvis d'una resposta en base a una petició prèvia. Les descàrregues iniciades per una instància NSURLDownload no pot ser posada en la memòria cau.
El sistema de càrrega d'adreces URL proporcionen un compost de disk i memòria cau que permet a una aplicació reduir la seva dependència d'una connexió de xarxa i proporciona un retorn més ràpid per respostes prèviament realitzades. La memòria cau s'emmagatzema de forma bàsica prèvia a l'aplicació.
La memòria cau es consultada per l'NSURLConnection o l'NSURLDownload d'acord amb la política de la cau especificada en l'inicialització de l'NSURLRequest.
La classe NSURLCache proporciona mètodes per configurar la mida de la memòria cau i la seva situació al disc. També proporciona mètodes per gestionar la col·lecció d'objectes NSCachedURLResponse que conté les respostes en la memòria cau.
Una NSCacheURLResponse encapsula la NSURLResponse i les dades del contingut de la URL. L'NSCachedURLResponse també proporciona un diccionari d'informació d'usuari que pot utilitzar-se per una aplicació per encauar qualsevol informació personal.
No totes les implementacions del protocol permeten repostes encauades. Actualment només les peticions http i https són encauades, i les peticions https mai són encauades al disc.
Una NSURLConnection pot controlar si una resposta està encauada i si la resposta hauria de ser encauada només a la memòria mitjançant l'implementació del mètode delegat connection:willCacheResponse:.
Alguns servidors restringeixen l'accés a certs continguts, requerint un l'usuari identificar-se amb un usuari i codi vàlids per permetre'n l'accés. En aquest cas, el contingut restringit s'agrupa juntament dins un reialme que requereix un conjunt únic de credencials.
El sistema de càrrega d'adreces URL proporcionen classes que modela les credencials i les àrees protegides així com també proporciona la persistència de les credencials segures. Els credencials poden especificar-se per persistir en una petició única, durant el funcionament d'una aplicació, o permanentment en la cadena de claus de l'usuari.
| Nota: Les credencials emmagatzemades de forma persistent es mantenen en la cadena de claus de l'usuari i estan compartides per totes les aplicacions. |
La classe NSURLCredential encapsula una credencial que està basat per un nom d'usuari, un codi de pas i el tipus de persistència a utilitzar. La classe NSURLProtectionSpace representa una àrea que requereix un credencial específica. Un espai protegit pot limitar-se a una única URL, acompanyada d'un reialme en un servidor web, o una referència a un proxy.
Una instància compartida de la classe NSURLCredentialStorage gestiona l'emmagatzematge de les credencials i proporciona un esquema d'un objecte NSURLCredential al corresponent objecte NSURLProtectionSpace pel qual proporciona autenticació.
La classe NSURLAuthenticationChallenge encapsula la informació necessària per una implementació de l'NSURLProtocol per autenticar una petició: una credencial proposada, l'espai protegit involucrat, l'error o la resposta que el protocol ha utilitzat per determinar que l'autenticació és requerida, i el nombre d'intents d'autenticació que s'han fet. Una intància d'NSURLAuthenticationChallenge també especifica l'objecte que inicialitza l'autenticació. L'objecte que inicia, referit com a enviador, ha de conformar al protocol NSURLAuthenticationChallengeSender.
Les instàncies NSURLAuthenticationChallenge s'utilitzen per les sub-classes NSURLProtocol per informar al sistema de càrrega d'adreces URL que es necessita l'autenticació. També es proporcionen als mètodes delegat de l'NSURLConnection i NSURLDownload que facilita la personalització de la captura de l'autenticació.
Donada la natura sense estat del protocol HTTP, les galetes sovint d'utilitzen per proporcionar emmagatzematge persistent de dades a través de les peticions URL. El sistema de càrrega d'adreces URL proporciona interfícies per crear i gestionar galetes així com rebre-les i enviar-les des dels servidors web.
| Nota: Les galetes són compartides per totes les aplicacions utilitzant el sistema de càrrega d'adreces URL. |
La classe NSHTTPCookie encapsula una galeta, proporcionant accessos per la majoria dels atributs més comuns de les galetes. També proporciona mètodes per convertir capçaleres de galetes HTTP a instàncies NSHTTPCookie i convertir una instància NSHTTPCookie a capçaleres pensades per utilitzar-se amb una petició NSURLRequest. El sistema de càrrega d'adreces URL automàticament envia qualsevol galeta emmagatzemada propietat d'un NSURLRequest excepte que la petició se li especifiqui que no enviï galetes. De la mateixa manera, els galetes retornades en una resposta NSURLResponse són acceptades d'accord amb la política actual d'acceptació de les galetes.
Les classes NSHTTPCookieStorage proporcionen una interfície per gestionar les col·leccions d'objectes NSHTTPCookie compartits per totes les aplicacions.
L'NSHTTPCookieStorage permet a una aplicació especificar una política d'acceptació de galeetes. La política d'acceptació de galetes controla si les galetes sempre seran acceptades, mai seran acceptades, o només s'acceptaran les del mateix domini del document URL prinicpal.
| Nota: Canviant la política d'acceptació de galetes en una aplicació afecta a la política d'acceptació de totes les altres aplicacions que s'executen. |
Quan una altra aplicació canvia l'emmagatzemament de les galetes o la política d'acceptació, l'NSHTTPCookieStorage notifica a l'aplicació publicant les notificacions NSHTTPCookieStorageCookiesChangedNotification i NSHTTPCookieStorageAcceptPolicyChangedNotification.
El disseny del sistema de càrrega d'adreces URL permet a una aplicació client estendre els protocols que es suporten per transferir dades. El sistema de càrrega d'adreces URL suporta nativament els protocols http, https, file i ftp.
Els protocols personalitzats estan implementats per sub-classes de NSURLProtocol i llavors registrant la nova classe en el sistema de càrrega d'adreces URL utilitzant el mètode registerClass: de la classe NSURLProtocol. Quan un objecte NSURLConnection o NSURLDownload inicia una connexió per una petició NSURLRequest, el sistema de càrrega d'adreces URL consulta cadascuna de les classes registrades en ordre invers al seu registre. La primera classe que retorni YES per al missatge canInitWithRequest: s'utilitza per agafar la petició.
El sistema de càrrega d'adreces URL és el responsable de crear i alliberar les instàncies NSURLProtocol quan les connexions comencen i es completen. Una aplicació mai hauria de crear una instància directament del NSURLProtocol.
Quan una sub-classe NSURLProtocol s'inicialitza per el sistema de càrrega d'URLs, aquest se li proporciona un objecte que conforma el protocol NSURLProtocolClient. La sub-classe NSURLProtocol envia missatges des del protocol NSURLProtocolClient a l'objecte client per informar al sistema de càrrega d'URLs que les seves accions han creat una resposta, han rebut dades, redirigit a noves URL, requerit autenticació i completat la càrrega. Si el protocol personalitzat suporta autenticació, llavors ha de conformar al protocol NSURLAuthenticationChallengeSender.