从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可以关联不同的资源在不同的机器上。