一.URL的概念与标准格式
1.URI/URL:
URI:Uniform Resource Identifier 统一资源标识符。
Web上可用的每种资源 -HTML文档、图像、视频片段、程序等由一个通用的资源标识符(Uniform Resource Identifier, 简称URI)进行定位。
URL:Uniform Resource Locator 统一资源定位符
用于完整的地描述Internet上网页和其他资源的地址的一种标识方法。Internet上的每一个网页都具有一个唯一的名称标识。通常称之为URL地址,这种地址可以是本地磁盘也可以是局域网上的某一台计算机,更多的是在Internet上的站点。简单的说URl就是Web地址,俗称“网址”
2.什么是URL
URI的概念比较偏广义上和理论上一点
URL是UR的子集
URI标识一个事物,URL定位一个事物;当然位置同样可以标识一个事物,所以每个URL都是一个URI,但是一个URI并不一定是一个URL。
URL是因特网资源标准化名称。URL为用户及浏览器提供找到的信息所需的所有条件,它定义了用户所需的特定资源,它位于何处以及如何获取它。
URI是一类通用的资源标识符,而URL只是它的子集。URI由URL和URN构成,URL通过描述资源的位置来标识资源,而URN则是通过名字来识别资源与位置无关。
HTTP规范将更多通用的概念URI作为其资源标示符,但实际上,HTTP应用程序处理的只是URI的URl子集。
3.通用格式
<scheme>://<user>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>
几乎没有URL能够包含所有组件,一般只包含最重要的三部分:方案(<scheme>)、主机(<host>)和路径(<path>)
4.URL的语法组件
组件 | 描述 | 默认值 | 举例及说明 |
方案 | 访问服务器获取资源时使用什么协议,以及第一个字幕符号开始,由第一个“:“结束,大小写无关 | 无 | HTTP:HTTPS;MAILTO:FTP;RTSP:RTSPU:FILE:NEWS:TELNET |
用户名和密码 | 用户名:某些方案访问资源时需要提供资源名密码:用户名后面可能要包含密码,中间用“:”分隔 | 匿名 | ftp://ftp.prep.ai.mit.edu/pub/gun ftp://anonymoue@ftp.prep.ai.mit.edu/pub/gun ftp://anonymoue:passwd@ftp.prep.ai.mit.edu/pub/gun http://user:passwd@www.test.com |
主机名和端口 | 主机资源宿主服务器的主机名或者ip 端口:资源宿主服务器正在监听的端口,解决了在哪台机器上装载资源和在机器什么地方访问资源的两组信息 | 每个方案特有 | http://www.baidu.com:80/index.html http://202.112.128.51:80/index.html |
路径 | 服务器上资源的本地名,有一个“/”将其与其他前面的组件分隔开。路径组件语法与服务器和方案有关 | 无 | http://www.jose-hardware.com/seasonal/index-fall.htm这其中/seasonal/index-fall.html则为路径 |
参数 | 某些方案会用这个组件来指定输入参数,参数为名/值对,URL中可包含多个参数字段,他们之间以及与路径的其余部分用“;“分隔 | 无 | ftp://prep.ai.mit.edu/gnu;type=d中type=d为参数。 http://joes-hardware.com/harmmers;sale=false/indez.html;graphics=true路径组件每段都提供子集参数 |
查询 | 某些方案会有查询自负串来传递参数以激活应用程序(比如数据库、公告板、所搜引擎以及其他因特网网关),查询组件的内容没有通用格式,用“?”将其与其余部分分隔开 | 无 | http://joes-hardware.com/inventory-check.cgi?item=1273&color=bulue&size=large多个查询条件使用“&”分隔 |
片段 | 一小片或一部分资源名字,引用对象时,不会讲frag字段传送给服务器,这是字段在客户端内部使用,通过“#”将其与URL其余部分隔开 | 无 | http://twitter.github.com/bootstrap/scaffoldinig.html#gridSystem片段gridSystem引用了/scaffolding.html页面的一部分,这部分名为gridSystem |
5.URL设计原则
1.一个URL必须唯一地,永久地代表一个在线对象
URL的最基本的使命是唯一地代表Internet上的一个对象,URL必须和Internet上的对象一对一匹配
2.尽可能用户友好
这是UR
L设计的根本,你的URL应该为最终用户而设计,保持URL友好的一个好办法是在保证可读性的同时让他尽可能短,短地址的崛起虽然能很好的使用地址变短,却在一定程度上失去了可读性。
3.可预测的URL
这也是URL一致性的一个表现,如果你的URL拥有很好的一致性,用户可以根据URL猜测别的内容URL。
假如/events/2010/01指向2010年1月份的日程内容,那/events/2009/01应当指向2009年1月的日程。
6.URL编码问题
URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号
这是因为网络标准RFC 1738做了硬性规定
意味着,如果URL中有汉字,就必须编码后使用。但麻烦的是,RFC 1738没有规定具体的编码方式,而是交给应用程序(浏览器)子集决定这导致“URL编码”成为一个混乱的领域。
二 .掌握NSURL类的使用
1. URL 对象的创建
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/aa/"];
NSLog(@"host:%@ path:%@", [url host],[url path]);
NSURL *url1 = [NSURL URLWithString:@"../index.html" relativeToURL:url];
NSLog(@"host:%@ path:%@," [url1 host] ,[url1 path]);
//文件URL
NSString *homePath = NSHomeDirectory();//获取文件路径
NSURL *fileUrl = [NSURL fileURLWith :homePath];
NSLog(@"fileUrl:%@",fileUrl);
2.熟悉常用用方法
-(NSString *)absoluteString
-(NSString *)relativeString
-(NSURL *)baseURL
-(NSURL *)absoluteURL
-(NSString *)absolutURL
-(NSString *)host
-(NSNumber *)port
-(NSString *)user
-(NSString *)password
-(NSString *)path
-(NSString *)fragment
-(NSString *)parameterString
-(NSString *)query
-(NSString *)relativePath
例
NSURL *url = [NSURL URLWithString:@"http://xq:123456@www.baidu.com:80/aa/bb/c/;f=c?i=4&b=0"];
NSLog(@"host:%@",[url host]);
NSLog(@"path:%@",[url path]);
NSLog(@"port:%@",[url port]);
NSLog(@"user:%@",[url user]);
NSLog(@"absoluteString:%@",[url absoluteString]);
NSLog(@"relativeString:%@",[url relativeString]);
NSLog(@"password:%@",[url password]);
NSLog(@"parameterString:%@",[url parameterString]);
NSLog(@"query:%@",[url query]);
NSLog(@"relativePath:%@",[url relativePath]);
if (![url isFileURL]) {
NSLog(@"这不是一个文件URL");
}
//相对路径
NSURL *url1 = [NSURL URLWithString:@"../../index.html" relativeToURL:url];
NSLog(@"host:%@",[url1 host]);
NSLog(@"path:%@",[url1 path]);
NSLog(@"relativePath:%@",[url1 relativePath]);
NSLog(@"absoluteURL:%@",[url1 absoluteURL]);
NSLog(@"absoluteString:%@",[url1 absoluteString]);
NSLog(@"relativeString:%@",[url1 relativeString]);
//文件的URL
NSString *homePath = NSHomeDirectory();
//文件的URL只能用下面的方法
NSURL *fileUrl = [NSURL fileURLWithPath:homePath];
NSLog(@"fileUrl: %@",fileUrl);
三 .NSURLRequest类的使用
NSURLRequest/NSURLMutableRequest类
这个类封装了对一个URL的请求信息
这个指定缓存策略
对象初始化后不能修改,是一个不可变的请求
//NSURLRequest
//用NSURL构造一个请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url1];
NSLog(@"request :%@",request);
//打印http请求的方法
NSLog(@"request method:%@",[request HTTPMethod]);
//打印http请求的索引头部
NSLog(@"request header:%@",[request allHTTPHeaderFields]);
四 .NSURLMutableRequest类
1. 如果需要在初始化后仍能对URL请求对象进行修改,可以使用NSMutableURLRequest,可以修改的内容包括:
缓存策略
超时时间
URL对象
主文档地址
头信息
上行内容(body)
请求方法(get,post,等)
Cookie
2.获取网络请求数据
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];