URL结构
2016-02-13 10:59
246 查看
从ios开发者角度来看,WorldWideWeb项目的另一项重要发明就是URL。URL为Interentnet上的任何资源与内容提供了全局唯一的位置名。最为原则,单个资源可以通过多个URL定位,但单个URL不能引用不同的资源。该规则存在例外情况,比如主机名可以指向一台模糊的主机。在IOS的URL加载系统中,NSURL对象用于管理URL对象。
![](https://img-blog.csdn.net/20160212170847203?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
协议 认证 主机名 端口
绝对路径 查询字符串
协议:协议部分指定了使用哪个应用层协议与服务器通信,除了HTTP外还可以使用FTP作为协议,HTTP的优势导致HTTP协议之前所使用的其它协议几乎灭绝了。IOS应用中常用的另一协议是FILE协议。FILE请求用于在应用沙箱中取得本地文件系统中的资源,如果使用字符串而没有使用协议创建NSURL对象,那么默认就会使用FILE协议。
认证:某些HTTP服务器支持在URL中传输用户认证以实现BASIC认证,图中的认证包含了用户名和密码,该格式使用的并不多,相比其它认证方法,这种认证的安全性有些低。
主机名:指定了包含请求资源的主机的TCP主机名或IP地址。如果URL协议是FILE,那么这部分与端口部分必须省略掉,之前的规则提到单个URL要引用唯一资源,不过在使用相对或本地主机名时就会出现例外情况,比如,如果使用localhost作为主机名,URL会引用本地机器。因此,不同的机器上的URL可以引用不同的资源。
端口:指定了客户端连接的TCP端口。如果省略,那么客户端就会使用特定协议的默认端口:HTTP是80,HTTPS是443,如果应用运行的设备不在你所控制的网络中,那么最好使用这些端口的值,
绝对路径:指定了网络资源的路径,就好像HTTP可以钻取为目录树一样。绝对路径可以包含任意数量的路径部分,每部分使用斜杠字符(/)分隔。绝对路径不可以包含问号,空格,回车与换行符。很多REST服务使用路径来传递值,用来唯一标识数据库中存储的实体。比如,路径/customer/456/address/0 可以指定索引为0的地址,并且具有标识456的客户。
查询字符串:指定查询内容。多个查询参数通过&字符分隔。查询字符串不可以包含空格,回车与换行符。
由于绝对路径与查询字符串的内容是受限的,因此URL通常会使用百分号进行编码,RFC 3986(http://tools.ietf.org/html/rfc3986)规定了URL百分号编码的细节信息。IOS为NSString对象提供了一个方法来执行URL的百分号编码。下面代码展示了如何对一个NSString对象进行百分号编码:
NSString *urlString=@"http://myhost.com?query=This is a question";
//下面这个方法在IOS9中已经不推荐使用了
NSString *encoded=[urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//推荐使用
NSString *emcoded1=[urlStringstringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSetURLQueryAllowedCharacterSet]];
协议 认证 主机名 端口
绝对路径 查询字符串
协议:协议部分指定了使用哪个应用层协议与服务器通信,除了HTTP外还可以使用FTP作为协议,HTTP的优势导致HTTP协议之前所使用的其它协议几乎灭绝了。IOS应用中常用的另一协议是FILE协议。FILE请求用于在应用沙箱中取得本地文件系统中的资源,如果使用字符串而没有使用协议创建NSURL对象,那么默认就会使用FILE协议。
认证:某些HTTP服务器支持在URL中传输用户认证以实现BASIC认证,图中的认证包含了用户名和密码,该格式使用的并不多,相比其它认证方法,这种认证的安全性有些低。
主机名:指定了包含请求资源的主机的TCP主机名或IP地址。如果URL协议是FILE,那么这部分与端口部分必须省略掉,之前的规则提到单个URL要引用唯一资源,不过在使用相对或本地主机名时就会出现例外情况,比如,如果使用localhost作为主机名,URL会引用本地机器。因此,不同的机器上的URL可以引用不同的资源。
端口:指定了客户端连接的TCP端口。如果省略,那么客户端就会使用特定协议的默认端口:HTTP是80,HTTPS是443,如果应用运行的设备不在你所控制的网络中,那么最好使用这些端口的值,
绝对路径:指定了网络资源的路径,就好像HTTP可以钻取为目录树一样。绝对路径可以包含任意数量的路径部分,每部分使用斜杠字符(/)分隔。绝对路径不可以包含问号,空格,回车与换行符。很多REST服务使用路径来传递值,用来唯一标识数据库中存储的实体。比如,路径/customer/456/address/0 可以指定索引为0的地址,并且具有标识456的客户。
查询字符串:指定查询内容。多个查询参数通过&字符分隔。查询字符串不可以包含空格,回车与换行符。
由于绝对路径与查询字符串的内容是受限的,因此URL通常会使用百分号进行编码,RFC 3986(http://tools.ietf.org/html/rfc3986)规定了URL百分号编码的细节信息。IOS为NSString对象提供了一个方法来执行URL的百分号编码。下面代码展示了如何对一个NSString对象进行百分号编码:
NSString *urlString=@"http://myhost.com?query=This is a question";
//下面这个方法在IOS9中已经不推荐使用了
NSString *encoded=[urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//推荐使用
NSString *emcoded1=[urlStringstringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSetURLQueryAllowedCharacterSet]];
相关文章推荐
- leetcode:Largest Number
- HDU【3038】How Many Answers Are Wrong
- 最优布线问题
- 图(邻接矩阵)
- pig: ERROR 1070
- 2776 寻找代表元(匈牙利算法)
- Android Fragment完全解析,关于碎片你所需知道的一切
- C#里面Attribute的使用方法
- dx11学习笔记-1.创建一个空窗口
- 《笨办法学Python》 第38课手记
- PHP操作Mysql疑问?
- Nmap
- Codeforces Round #342 (Div. 2) 625C K-special Tables(脑洞)
- 【翻译自mos文章】怎么startup/shutdown PDB?
- UITableView如何撤销移动操作
- UITableView如何撤销移动操作
- python socket 解码IP层
- UITableView如何撤销移动操作
- css命名规范
- uvaoj-10082:WERTYU