從IOS角度看http url是服務器上資源的一個位置,作為這個規則一個單獨的資源可能和很多url有關系,但是一個url不能關聯很多資源。但是也有例外的情況,例如當hostname關聯一個不穩定的host.在IOS中我們用NSUrl來管理url.
一個URL有5個代表性的組成部分如上圖
Protocol:這個協議規定具體哪個應用層協議和服務器交互。其實除了這個http還有ftp協議。http協議的統治地位因為pre-http協議遭到挑戰。另一個經常用的協議是file協議,file協議是IOS的app用來在沙盒檢索數據的協議。如果你用NSURL但是沒有用到其他的協議,默認用的就是這個協議。
Credentials:一些http服務器支持用戶憑證的URL對基本身份驗證是一個挑戰。如上圖所示這個憑證組成部分包含了用戶名密碼的身份驗證,這種格式索然不是很普遍,考慮比其他方式驗證更不安全。HTTP 身份認證一般有幾種方式:
1. HTTP基本身份驗證(BASIC):usr/pwd通過Base64編碼后加入某個請求首部
2. HTTP摘要身份驗證(DIGEST):(HTTP1.1支持)服務器端驗證客戶端發來的MD5摘要(包括服務器端發來的含有時間戳、請求資源、服務器標識的nonce)
3. HTTPS客戶身份驗證(CLIENT-CERT):要求客戶端的SSL
4. 基於表單的身份驗證(FORM):servlet規范獨有,由servlet容器自身來實現,明文傳輸(具體實現依賴<login-config>元素中<form-login-config>的設置)
NTLM授權
要使用NTLM授權的Windows服務器,你還需要指定你要進行授權域。
使用HTTPS驗證將使其他三種認證失效:無論是只對服務器進行認證還是對客戶端和服務器端都進行認證,連接都是經過加密的。
在IOS中我們參考ASIHttpRequest他的身份驗證方式
1:
為URL指定要使用的用戶名和密碼
將憑據存儲到keychain
將憑據存儲到session中
NTLM授權等等
我們會用專門的篇幅來介紹身份認證方面的問題
Hostname:這個組件包含TCP的hostname和IP地址關於主機包含它想要的資源。如果URL的協議是file那么應該省略這些東西。一個URL針對一個獨立的資源被打破這是個例外當相對的和本地的主機名字被使用。例如你的主機名字作為hostname,這個URL關聯本地機器然后用同一個URL可以關聯不同的資源在不同的機器上。