本章主要内容:

  • URL语法,以及各种URL组件的含义及其所做的工作;
  • 很多Web客户端都支持的URL快捷方式,包括相对URL和自动扩展URL;
  • URL编码和字符规则;
  • 支持各种因特网信息系统的常见URL方案;
  • URL的未来,包括URN——这种框架可以在对象从一处搬到另一处时,保持稳定的访问名称。

2.1 浏览因特网资源

URL是浏览器寻找信息时所需的资源位置。
URL是人们对HTTP和其他协议的常用访问点:一个人将浏览器指向一个URL,浏览器就会在幕后发送适当的协议报文来获取人们所期望的资源。

URI是一类更通用的资源标识符,URL实际上是它的一个子集。URI是一个通用的概念,由两个主要的子集URLURN构成,URL是通过描述资源的位置来标识资源的,而URN则是通过名字来标识符资源的,与它们当前所处位置无关。

HTTP规范将更加通用的概念URI作为其资源标识符,但实际上,HTTP应用程序处理的只是URIURL子集。

URL的组成部分

示例URL:http://www.joes-hardware.com/seasonal/index-fall.html。

  • URL的第一部分(http)是URL方案(scheme)。方案可以告知Web客户端怎样访问资源。
  • URL的第二部分(www.joes-hardware.com)指的是服务器的位置。这部分告知Web客户端资源位于何处。
  • URL的第三部分(/seasonal/index-fall.html)是资源路径。路径说明了请求的是服务器上哪个特定的本地资源。

示例图:

URL可以通过HTTP之外的其他协议来访问资源。它们可以指向因特网上的任意资源,或者个人的E-mail账户:
mailto:president@whitehouse.gov
或者通过其他协议(比如FTP协议)访问的各种文件:
ftp://ftp.lots-o-books.com/pub/complete-price-list.xls
或者从流视频服务器上下载电影:
rtsp://www.joes-hardware.com:554/interview/cto_video

URL提供了一种统一的资源命名方式。多数URL都有同样的:“方案://服务器位置/路径”结构。

2.2 URL的语法

多数URL方案的URL语法都建立在这由9部分构成的通用格式上:

<scheme>://<user>:<password>@<host>:<port>/<path>;<param>?<query>#<frag>

URL最重要的3个部分是方案(scheme)、主机(host)和路径(path)。

通用URL组件

组件 描述 默认值
方案 访问服务器以获取资源时要使用哪种协议
用户 某些方案访问资源时需要的用户名 匿名
密码 用户名后面可能要包含的密码,中间由冒号(:)分隔 <E-mail 地址>
主机 资源宿主服务器的主机名或点分IP地址
端口 资源宿主服务器正在监听的端口号。很多方案都有默认端口号(http的默认端口号为80) 每个方案特有
路径 服务器上资源的本地名,由一个斜杠(/)将其与前面的URL组件分隔开来。路径组件的语法是与服务器和方案有关的(URL路径可以分为若干个段,每个段都可以有其特有的组件)
参数 某些方案会用这个组件来指定输入参数。参数为名/值对。URL中可以包含多个参数字段,它们之间以及与路径的其余部分之间用分号(;)分隔
查询 某些方案会用这个组件传递参数以激活应用程序(比如数据库、公告板、搜索引擎以及其他因特网网关)。查询组件的内容没有通用格式。用字符“?”将其与URL的其余部分分隔开来
片段 一小片或一部分资源的名字。引用对象时,不会将frag字段传给服务器;这个字段是在客户端内部使用的。通过字符“#”将其与URL的其余部分分隔开来
2.2.1 方案——使用什么协议
  • 方案实际上是规定如何访问指定资源的主要标识符,它会告诉负责解析URL的应用程序应该使用什么协议。
  • 方案组件必须以一个字母符号开始,由第一个“:”符号将其与URL的其余部分分隔开来。方案名是大小写无关的,URL“http://www.sina.com”和"HTTP://www.sina.com"是等价的。
2.2.2 主机与端口

主机组件标识了因特网上能够访问资源的宿主机器。
可以用主机名或者IP地址来表示主机名。
示例

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

上面的两个URL都是指向同一个资源——第一个URL是通过主机名,第二个是通过IP地址指向服务器的。
HTTP协议的默认端口号为80。

2.2.3 用户名和密码

更有趣的组件是用户和密码组件。很多服务器都要求输入用户名和密码才会允许用户访问数据。FTP服务器就是这样一个常见的实例。如下示例:

ftp://ftp.prep.ai.mit.edu/pub/gnu
ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu
ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
http://joe:joespasswd@www.joes-hardware.com/sales_info.txt

示例一没有用户或密码组件,只有标准的方案、主机和路径。如果某些应用程序使用的URL方案要求输入用户名和密码,比如FTP,但用户没有提供,它通常会插入一个默认的用户名和密码。比如,如果向浏览器提供一个FTP URL,但没有指定用户名和密码,就会插入anonymous(匿名用户)作为你的用户名,并发送一个默认的密码(Internet Explorer会发送IEUser,Netscape Navigator则会发送mozilla)。

示例二显示了一个指定为anonymous的用户名。这个用户名与主机组件组合在一起,看起来就像E-mail地址一样。字符“@”将用户和密码组件与URL的其余部分分隔开来。

示例三,指定了用户名(anonymous)和密码(my_passwd),两者之间由字符“:”分隔。

2.2.4 路径

URL的路径组件说明了资源位于服务器的什么地方。路径通常很像一个分级的文件系统路径。比如:

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

这个URL中的路径为/seasonal/index-fall.html,很像UNIX文件系统中的文件系统路径。路径是服务器定位资源时所需的信息。

2.2.5 参数

为了向应用程序提供它们所需的输入参数,以便正确地与服务器进行交互,URL中有一个参数组件。这个组件就是URL中的名值对列表,由字符“;”将其与URL的其余部分(以及各名值对)分隔开来。它们为应用程序提供了访问资源所需的所有附加信息。例如:

ftp://prep.ai.mit.edu/pub/gnu:type=d

例子中,有一个参数type=d,参数名为type,值为d。
如前所述,HTTP URL的路径组件可以分成若干路径段。每段都可以有自己的参数。比如:

http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true

例子中有两个路径段,hammers和index.html。hammers路径段有参数sale,其值为false。index.html段有参数graphics,其值为true。

2.2.6 查询字符串
http://www.joes-hardware.com/inventory-check.cgi?item=12731

这个URL与我们见过的其他URL类似。只有问号(?)右边的内容是新出现的。这部分被称为查询(query)组件。URL的查询组件和标识网关资源的URL路径组件一起被发送给网关资源。基本上可以将网关当作访问其他应用程序的访问点。

2.2.7 片段

有些资源类型,比如HTML,除了资源级之外,还可以做进一步的划分。比如,对一个带有章节的大型文本文档来说,资源的URL会指向整个文本文档,但理想的情况是,能够指定资源中的那些章节。

为了引用部分资源或资源的一个片段,URL支持使用片段(frag)组件来表示一个资源内部的片段。比如,URL可以指向HTML文档中一个特定的图片或小节。片段挂在URL的右手边,最前面有一个字符“#”。如

http://www.joes-hardware.com/tools.html#drills

例子中,片段drills引用了Joe的五金商店Web服务器上页面/tools.html中的一个部分。这部分的名字为drills。

HTTP服务器通常只处理整个对象,而不是对象的片段,客户端不能将片段传送给服务器。浏览器从服务器获得了整个资源之后,会根据片段来显示你感兴趣的那部分资源。

2.3 URL快捷方式

Web客户端可以理解并使用几种URL快捷方式。相对URL是在某资源内部指定一个资源的便捷缩略方式。很多浏览器还支持URL的“自动扩展”,也就是用户输入URL的一个关键部分,然后由浏览器将其余部分填充起来。

2.3.1 相对URL

URL的两种方式:

  • 相对URL
  • 绝对URL

绝对URL中包含有访问资源所需的全部信息。
相对URL是不完整的。要从相对URL中获取访问资源所需的全部信息,就必须相对于另一个,被称为其基础(base)的URL进行解析。

使用缩略形式的相对URL语法,HTML的编写者就可以省略URL中的方案、主机和其他一些组件了。这些组件可以从它们所属资源的基础URL中推导出来。其他资源URL也可以用这种缩略形式来表示。

2.3.2 自动扩展URL

有些浏览器会在用户提交URL之后,或者在用户输入的时候尝试着自动扩展URL。这就为用户提供了一条捷径:用户不需要输入完整的URL,因为浏览器会自动扩展。
这些“自动扩展”特性有以下两种方式。

  • 主机名扩展
  • 历史扩展

与代理共同使用时,URL自动扩展的行为可能会有所不同。

2.4 各种令人头疼的字符

2.4.1 URL字符集
2.4.2 编码机制

编码机制就是通过一种“转义”表示法来表示不安全字符的,这种转义表示法包含一个百分号(%),后面跟着两个表示字符ASCII码的十六进制数。

2.4.3 字符限制

保留及受限的字符

字符 保留/受限
% 保留作为编码字符的转义标志
/ 保留作为路径组件中分隔路径段的定界符
. 保留在路径组件中使用
保留在路径组件中使用
# 保留作为分段定界符使用
? 保留作为查询字符串定界符使用
; 保留作为参数定界符使用
: 保留作为方案、用户/口令,以及主机/端口组件的定界符使用
$,+ 保留
@&= 在某些方案的上下文中有特殊的含义,保留
{}|^~[]’ 由于各种Agent代理,比如各种网关的不安全处理,使用受限
<>" 不安全;这些字符在URL范围之外通常是有意义的,比如在文档中对URL自身进行定界(比如“http://www.joes-hardware.com”),所以应该对其进行编码
0x00-0x1F,0x7F 受限,这些十六进制范围内的字符都在US-ASCII字符集的不可打印区间内
>0x7F 受限,十六进制值在此范围内的字符都不在US-ASCII字符集的7比特范围内

第一部分 HTTP:Web的基础——第2章 URL与资源相关推荐

  1. web编程 模块1 html,Web编程基础第1章HTML基础.ppt

    正文 正文 正文 谢 谢 Thanks for listening. 第1章 HTML基础 目标 -*- 了解Web发展史及HTML特点 掌握HTML文档结构的组成 掌握HTML的语法结构 掌握文本标 ...

  2. 第五模块:WEB开发基础-第8章 Jquery开发BootStrap

    系列文章目录 Jquery开发&BootStrap 文章目录 系列文章目录 前言 一.jQuery 1.知识点介绍 2.基础核心使用 3.入口函数 4.如何处理多个库$冲突问题 二.选择器 1 ...

  3. web前端基础——第五章

    目录 五十.strong和b.em和i 五十一.引用标签 五十二.iframe嵌套页面 五十三.br与wbr 五十四.pre与code 五十五.map与area 五十六.embed与object 五十 ...

  4. 第一阶段·Linux运维基础-第1章·Linux基础及入门介绍

    01-课程介绍-学习流程 02-服务器硬件-详解 03-服务器核心硬件-服务器型号-电源-CPU 01-课程介绍-学习流程 1.1. 光看不练,等于白干: 1.2 不看光练,思想怠慢: 1.3 即看又 ...

  5. 第五模块·WEB开发基础-第2章JavaScript基础

    第1章 JavaScript基础 01-JavaScript历史介绍 02-JavaScript的组成 03-JavaScript的引入方式 04-变量的使用 05-基本数据类型(一) 06-基本数据 ...

  6. Three 之 three.js (webgl)基础 第一个入门 Web 3D 场景

    Three 之 three.js (webgl)基础 第一个入门 Web 3D 场景 目录 Three 之 three.js (webgl)基础 第一个入门 Web 3D 场景 一.简单介绍 二.Th ...

  7. Web开发(一)·期末不挂之第一章·Web开发基础(不背就挂的基础知识)

    Web开发基础 一.网站的访问过程 ✪✪✪ 二.Web应用 ✪✪✪ 三.其他 一.网站的访问过程 ✪✪✪ 网址: URL(互联网上标准资源的地址)组成部分: 协议:http:// 域名:-com/cn ...

  8. 20164317《网络对抗技术》Exp9 Web安全基础

    Exp9 Web安全基础 一.实践目标 理解常用网络攻击技术的基本原理. 在Webgoat,实践相关实验. SQL注入攻击 XSS攻击 CSRF攻击 二.实践过程 1.环境配置: 下好jar包然后放在 ...

  9. 2018-2019 20165208 网络对抗 Exp9 Web安全基础

    目录 2018-2019 20165208 网络对抗 Exp9 Web安全基础 实验内容 基础问题回答 实践过程记录 1. WebGoat准备 2. SQL注入攻击 2.1 Command Injec ...

最新文章

  1. 二手车电商很热?其实都是平台在自嗨!
  2. resize函数_每日一题手写函数防抖与节流
  3. 朱林北京大学计算机学院,北大、清华状元谈英语学习经验-20210411145045.docx-原创力文档...
  4. 阿当姆斯matlab,数值计算方法与MATLAB应用
  5. C#委托及事件处理机制浅析
  6. ffmpeg的新东东:AVFilter
  7. Web前端文档阅读笔记-vis.js动态添加节点(vue cli环境)
  8. orgmode导出html,含有python代码块的ORG-MODE导出为HTML时出错
  9. 十荟团关停全国业务 社区电商开启“降本增效”大突围
  10. 我的JavaWeb学习1
  11. Keras深度学习实战(3)——神经网络性能优化技术详解
  12. 提高Office2010等高版的启动速度文章链接收集-Office2010打开慢速度怎么办?
  13. 阿里百度腾讯facebookMicrosoftGoogle开源项目汇总
  14. 0x0000006b蓝屏解决方法 - WIN7
  15. 松翰单片机之外设的使用
  16. ubuntu18.04美化主题(完整版)
  17. C++机器学习库整理
  18. python-numpy-pandas
  19. 中文序列标注系列(绪)
  20. 装机不求人,10 分钟电脑配置挑选速成攻略

热门文章

  1. 浏览器和内核的发展史
  2. 隐私求交| Simple, Fast Malicious Multiparty Private Set Intersection
  3. linux基本功系列-help命令实战
  4. 使用Microsoft Edge Beta将网页变成应用
  5. nginx服务器操作命令(重启命令关闭)
  6. 令人心焦的“发票时间”,你有过吗?
  7. leetcode数据结构入门-36. 有效的数独
  8. PS教程新手入门(二)--保存清晰透明的.Png格式图片的方法和技巧教程
  9. 记录sentry的踩坑之路
  10. 【Android App】获取照片里的位置信息及使用全球卫星导航系统(GNSS)获取位置实战(附源码和演示 超详细)