转载请注明出处:
本文出自:NiZhuanXingHe的博客

概述

每一个服务器资源都有一个名字,服务器的资源名被称为 统一资源标识符 ——URI,URI有两种形式,分别是URL(统一资源定位符)和URN(统一资源名),目前,URL被使用的很广泛。

URL

可以这么说,URL是web客户端向web请求信息时所需的资源位置,通过url,web客户端可以获取到数据资源。

1、URL的语法

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
<方案>://<用户>:<密码>@<主机>:<端口>/<路径>;<参数>?<查询>#<片段>
  • 方案:访问服务器获取资源所使用的协议,如:http、ftp
  • 用户:访问资源的用户名
  • 密码:用户名后可能包含的密码
  • 主机:资源宿主服务器的主机名或ip地址
  • 端口:资源宿主服务器正在监听的端口号,默认为 80
  • 路径:服务器资源本地名,由斜杠(/)与前面URL组件分隔开
  • 参数:相互之间,以及与URL前面组件由分号(;)分隔开
  • 查询:用问号(?)与URL其余组件分隔开
  • 片段:一小片或者一部分资源名字。引用对象时,不会讲frag传给服务器;这个值在客户端内部使用。通过字符(#)将其与URL的其余部分分隔开来

1.1、主机和端口

http://www.joes-hardware.com:80/index.html
http://192.0.0.168:80/index.html

这两个url,前者是主机名:端口,后者是ip地址:端口。若是主机名,则需要通过DNS得到主机ip地址,之后才能访问。

1.2、用户名和密码

ftp://ftp.prep.ai.mit.edu/pub/gnu
ftp://cwb@ftp.prep.ai.mit.edu/pub/gnu
ftp://cwb:cwbpassword@ftp.prep.ai.mit.edu/pub/gnu
http://cwb:cwbpassword@www.cwb-guitar.com/sales_info.txt

第一个例子没有用户或密码组件,只有标准化方案(ftp:文件传输协议)、主机(ftp.prep.ai.mit.edu)和路径(/pub/gnu);
第二个例子指定了一个用户名(cwb);
第三个例子用户名(cwb)和密码(cwbpassword)之间由字符":"隔开;
第四个例子则包含用户名和密码,标准化方案为http。

1.3、路径

url路径说明了资源位于服务器的具体位置,如:

http://www.jjjjj.com:80/aaa/bbb/index-a.html

其中“/aaa/bbb/index-a.html”就是这个url的路径。

1.4、参数

对于很多方案来说,仅仅通过方案名、主机、端口、用户名、密码和路径仍不能完成工作,还需要提供更多的信息。负责解析url的应用程序需要这些协议参数来访问资源并提供正确的服务。

ftp://prep.ai.mit.edu/pub/gnu;type=d
ftp://www.cwbftp.com/aaa;param1=false/index.html;param2=good

第一个例子中,有一个参数type=d,参数名是type,值为d;
第二个例子中,url有两段路径,每段路径又一个参数,分别是param1,值为false,param2,值为good。HTTP URL的路径组件可以分成若干路径段。

1.5、查询字符串

查询字符串用于缩小请求资源的范围:

http://www.abc.com/check-data?page=2
http://www.abc.com/check-data?page=2&level=0

上面例子中,诸如“age=2”这样的字段就是查询字符串,与其他URL组件以(?)隔开。查询字符可以有多组名值对,它们以&隔开。

1.6、片段

http://www.abc.com/doc.html#chapter1

这个url中,用(#)与前段隔开的字符chapter1就是片段,客户端不会将片段传送给服务器,所以请求服务器资源时获取的会是的整个doc.html内容,但是收到这些数据资源后,客户端本地会以碎片过滤得到chapter1部分内容。

2、URL快捷方式

Web客户端可以理解并使用几种URL快捷方式:相对URL和URL自动扩展。

2.1、相对URL

URL有两种方式,相对和绝对。绝对URL中包含访问资源所需的全部信息;而相对URL则是一种便捷缩略的不完整记法。
相对URl必须相对一个基础URL进行解析,才能获得完整的URL。

<html lang="en">
<head><meta charset="UTF-8"><title>相对url实例</title><base href="https://www.guitar.com/">
</head>
<body><a href="/data/postguitarsheet">上传吉他谱</a>
</body>
</html>

如上面的html代码所示,在head下的base标签中href的值"https://www.guitar.com/",就是一个基础URL,body下的a标签的href的值是一个相对URL,它是合法的,但需要和基础url对比和解析,得到一个完整URL,即绝对URL,“https://www.guitar.com/data/postguitarsheet”。这里是去掉’/'拼接就可以,但有时候不需要去除其他部分,可直接拼接在一起,成为一个完整的URL。
上面的例子给出了显示提供的基础URL,但有时是不会显示提供,而是封装起来。这个时候的基础URL需要经过推导才能得到。有些情况下,基础URL也不会被给出。
将相对URL转换成绝对URL的过程:

上面的这张图,是基础URL和相对URL的所有组件拆开,进行比较判断,最后经处理,将相对URL合成绝对URL。
这种方法或函数在很多语言中是被官方提供的,如java:

URL baseUri = new  URL("http://www.enet.com.cn/enews/inforcenter/designmore.jsp");
URL absoluteUri = new URL( baseUri, "../test.html");
absoluteUri.toString();

2.1、自动扩展URL

当你向浏览器输入一个不完整的URL,浏览器会帮你自动扩展一个完整路径,通过两种方式:

  • 主机名扩展:比如你在浏览器地址栏输入"baidu",浏览器会构建出"www.baidu.com",如果匹配不到,会尝试换几种方式扩展。

  • 历史记录扩展:浏览器会存储用户访问历史,当你输入一条语句,它会在历史记录中匹配。

3、URL字符

URL满足以下三个特性:

  • 可移植的:统一命名因特网上所有资源,并可通过任意因特网协议安全传输。
  • 可读的:可见、可打印;
  • 完整的:那么信息不能丢失。但有些协议会剔除一些特定字符,所以URL只能使用较小的、安全的、通用的字母表中的字符,并将不安全字符转义成安全字符,再进行传输。

3.1、字符集

URL使用US-ASCII字符集,但US-ASCII很通用,并不能支持各种国家民族语言中的常见变体字符,所以URL集成了转义序列,通过转义序列,就能US-ASCII字符集的有限子集对任意字符或数据进行编码,包括二进制数。

3.2、URL编码

就是一种转义编码,将URL中的不安全字符转义成安全的字符组合。
格式:一个百分号(%),后面是两个ASCII的十六进制数。

字符 ASCII码 示例
空格 32(0x20) http://www.abd.com/dog%20waste.html
126(0x7E) http://www.abd.com/%7Edogwaste.html

3.3、URL字符限制

4、Web方案

Web方案有很多:

  • http:超文本传输协议;
基本格式:http://<host>:<port>/<path>?<query>#<frag>
示例:http://www.jitashe.org/artist
  • https:http+ssl;
基本格式:https://<host>:<port>/<path>?<query>#<frag>
示例:https://www.baidu.com/cache/sethelp/help.html
  • ftp:文件传输协议
基本格式:ftp://<user>:<password>@<host>:<port>/<path>;<params>
示例:ftp://nzxh:123456@guitar.com:80/sheet/page1;type=classic
  • file:指定一台主机上可直接访问的文件;
基本格式:file://<host>/<path>
示例:file://myhost/document/index.html
  • news:用于访问一些特定的文章或新闻组;
基本格式:news:<newsgroup>news:<news-article-id>
示例:news:rec.arts.starpage
  • telnet:用于访问交互式业务,它不是对象本身,而是可以通过telnet协议访问的交互式应用程序;
基本格式:ftp://<user>:<password>@<host>:<port>/
示例:ftp://nzxh:123456@guitar.com:80/
  • mailto: Mailto URL指向的是E-mail地址,因特网E-mail地址的语法记录在RFC-822中;
基本格式:mailto:<RFC-822-addr-spec>
示例:mailto:aaaaa@163.com
  • rtsp/rtspu:RTSP URL是通过实时流传输协议(Real Time Streaming Protocol)解析的音/视频媒体资源标识符
基本格式:rtsp://<user>:<password>@<host>:<port>/<path>rtspu://<user>:<password>@<host>:<port>/<path>
示例:rtsp://nzxh:123456@guitar.com:80/sheet/page1

总结

未来,URL还会被改进。

HTTP之统一资源定位符URL相关推荐

  1. html中统一资源定位符,URL(统一资源定位)

    URL(统一资源定位)[编辑] 一.URL的定义 统一资源定位符(URL,英语UniformResourceLocator的缩写)也被称为网页地址,是因特网上标准的资源的地址.即UniformReso ...

  2. 统一资源定位符URL的简单了解

    URL的格式 (1)统一资源定位符 URL 是对可以从因特网上得到的资源的位置和访问方法的一种简洁的表示. (2)URL 给资源的位置提供一种抽象的识别方法,并用这种方法给资源定位. (3)只要能够对 ...

  3. 统一资源定位符URL

    统一资源定位符 统一资源定位符(URL,英语UniformResourceLocator的缩写)也被称为网页地址,是因特网上标准的资源的地址.它最初是由蒂姆·伯纳斯-李发明用来作为万维网的地址的.现在 ...

  4. 【网络】统一资源定位符 URL (Uniform Resource Locator)

    统一资源定位符 (Uniform Resource Locator, URL) 是用于完整地描述Internet上网页和其他资源的地址的一种标识方法.  Internet上的每一个网页都具有一个唯一的 ...

  5. 网址--统一资源定位符(URL)构成详解

    一.万维网产生:   万维网(World Wide Web,WWW或者W3),又叫做环球网,有时候也直接叫做Web.万维网的历史并不长,其产生于1989年瑞士日内瓦的CERN(欧洲量子物理实验室).最 ...

  6. url即统一资源定位符

    统一资源定位符 url即统一资源定位符. 统一资源定位符(Uniform Resource Locator,缩写为URL)是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资 ...

  7. URL 统一资源定位符

    全称:Uniform Resource Locator 译为:统一资源定位符 URL(Uniform Resoure Locator 统一资源定位器)是WWW网页的地址,好比一个街道在城市地图上地址. ...

  8. URL(统一资源定位符)

    互联网上各种信息都有,并散布在各个服务器站点中,但是资源却有着唯一标识它们的地址值.如果想得到某个资源,这时候就需要知道该资源在互联网中的唯一的地址,也就是统一的资源定位符(URL). 统一资源定位符 ...

  9. HTTP协议及URL统一资源定位符详解

    一.HTTP 介绍 HTTP:HyperText transfer Protocol 超文本传输协议 超文本:文字;图片;音频;视频 作用: 规范网络中如何传递数据[文字;图片;音频;视频] 1.1 ...

最新文章

  1. LIVE 预告 | 华为诺亚韩凯:Transformer in Transformer
  2. 获得系统当前时间的字符串格式
  3. 实时计算 Flink 版总体介绍
  4. 关于CoordinatorLayout的用法——复杂交互的克星
  5. mysql卸载权限不够_Linu下启动MySQL结果显示:env: /etc/init.d/mysql:权限不够怎么解决?...
  6. React 篇 Search Bar and content Table
  7. [你必须知道的.NET] 开篇有益
  8. python下:用 matplotlib.pyplot 显示 Opencv 读取的图像
  9. hdu 1556 Color the ball (线段树做法)
  10. MySQL · 性能优化 · SQL错误用法详解
  11. 修改服务器的maxpostsize的值,maxPostSize属性改变tomcat的post请求的请求体大小设置...
  12. pandas 聚合 df.groupby.agg
  13. 免费快递查询API接口
  14. Memcached damo
  15. win10主题更换_小白如何做到不更换硬件提升电脑性能做到不卡顿?
  16. 首款国产太赫兹成像芯片发布
  17. 计算机编程 计算存款利息,第8周项目5-定期存款利息计算器
  18. Linux查看CUDA版本以及nvcc: command not found
  19. ECharts饼图实例
  20. cesium实现流入迁徙图(仿echarts)(着色器)(cesium篇.52)

热门文章

  1. Little Busters Ex(LBEX) 修改工具(任意剧情查看工具)
  2. 接口熔断 java_SpringCloud(五):服务熔断与熔断监控
  3. NAT类型与验证方法
  4. 彻底搞懂平衡二叉树(AVL)建树过程(左旋、右旋)
  5. python数据数据存储-Python存储数据的方式
  6. Cortex M4 中断向量表
  7. 米转经纬度_高速公路十米桩号与经纬度的转换方法与流程
  8. 小小勇者服务器维护,小小勇者超详细技巧总汇 新手必备心得一览[多图]
  9. 深度神经网络回归_深度神经网络
  10. 区块链技术公司谈美国乌克兰将对数字资产收税