统一资源定位符(英语:Uniform Resource Locator,常缩写为URL),俗称网址。
如同在网络上的门牌,是因特网上标准的资源的地址(Address)。
相关定义:
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。
统一资源定位符的标准格式如下:
协议类型:[//服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]
统一资源定位符的完整格式如下:
协议类型:[//[访问资源需要的凭证信息@]服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]
HTTP
超文本传输协议([HTTP])的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:
1. 传送协议。Data URI scheme
2. 层级URL标记符号(为[//],固定不变)
3. 访问资源需要的凭证信息(可省略)
4. 服务器。(通常为域名,有时为IP地址)
5. 端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
6. 路径。(以“/”字符区别路径中的每一个目录名称)
7. 查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
8. 锚点、片段。以“#”字符为起点
iOS的URL属性对应的部分总览:
https://lzy:521@www.zuzuche.com:8080/trip/index.asp?boardID=5&ID=24618&page=1#name
scheme://user:password@host:port/path?query#fragment
absoluteString对应完整的URL String。
relative-代表,除掉baseURL的其他部分。
现在以下面的URL为例,讲解一下组成部分以及iOS所对应的属性
http://www.zuzuche.com:8080/trip/index.asp?boardID=5&ID=24618&page=1#name
从上面的URL可以看出,一个完整的URL包括以下几部分:
1.协议部分(Scheme):该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP,HTTPS等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
url.scheme = http;
2.域名部分:该URL的域名部分为“www.zuzuche.com”。一个URL中,也可以使用IP地址作为域名使用(如:10.20.1.2)
url.host = www.zuzuche.com
3.端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口
url.port = 8080
4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/trip/”
文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
iOS中并没有区分虚拟目录和文件名,而是统一处理
url.path = /trip/index.asp
5.锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
url.fragment = name
6.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
注意:#代表网页中的一个位置。其右面的字符,就是该位置的标识符。
#是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。
query = boardID=5&ID=24618&page=1