1 URL统一资源定位符

URL 是浏览器寻找信息时所需的资源位置。通过 URL,人类和应用程序才能找到、使用并共享因特网上大量的数据资源。
URL是作为URI的一个子集,URI是一类更通用的资源标识符,主要是由URL和URN构成。HTTP 规范将更通用的概念 URI 作为其资源标识符,但实际上,HTTP 应用程序处理的只是 URI 的 URL 子集。

URL主要内容由三部分组成

  • 方案scheme:说明访问资源所使用的协议,如:HTTP协议(http://)
  • 第二部分为服务器的地址,告知web客户端资源位于何处,如:www.example.com
  • 其余部分用于指定服务器上的具体某个资源路径,如:/doc/guide.html

URI被称为统一资源标识符(Uniform Resource Identier,URI)

统一资源名(URN)为URI的第二种形式。其是作为通过名字来识别资源的,和其所处位置无关。也就是说,我们从一个地方将该资源转移到另外一个地方,不会影响他的URN,我们还是能通过其URN定位到该资源

2 URL语法

URL提供了一种定位Internet上资源的手段。但是这些资源可以通过不同的Scheme进行访问(如:HTTP, FTP, STMP),同时使用的Schema不同,URL的语法也会有一定程度的差异。虽然有差异,但是大部分URL都会遵循如下规则:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
但是一般看到的URL都不会完整包含全部内容,一般都只是其中某些部分的组合。下表是对每个部分的说明:

2.1 scheme——使用什么协议

scheme用于规定如何访问指定资源的主要表示标识符,会告诉负责解析URL的应用程序使用什么协议。由第一个":"符号将其余URL其他组件分开(如http:表示用的HTTP协议),同时其是大小写不敏感的,即:“http:”和“HTTP:”是等价的。

2.2 主机与端口

前面的scheme只是告诉服务器用什么协议来访问资源,但是要怎么找到安装有服务器的机器呢,就是通过主机,找到主机后,有可能一台主机上面会有很多服务,我们需要找到指定的服务(应用程序),这个时候就需要指定该应用程序监听的端口。所以最终通过主机和端口就能最终确定服务所在的位置了。
一般主机有两种表示方式,一直是直接用IP(Internet Procotol)地址,一种使用域名表示,结合端口表示如下:

  方式         地址
  IP地址   http://161.58.228.45:80/index.html
  域名    http://www.example.com:80/index.html
假设上述的161.58.288.45的IP就是对域名www.example.com对应的IP的话,那两者访问的就是同一服务器上的同一资源。

2.3 用户名和密码

用户名和密码用“@”符号将它和其他URL组件分隔开来,但并不是所有的URL都会有用户名和密码,如:

  • 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

这些都是合法的URL地址。第一个是没有用户名和密码的,第二个是只有用户名,第三个是有用户名和密码的。

2.4 路径

URL中的路径组件说明了资源存在于服务器的什么位置

如:
  http://www.joes-hardware.com:80/seasonal/index-fall.html
这个URL中的“/seasonal/index-fall.html”就是路径。一般用“/”将路径分为各路径段。

2.5 参数(了解)

参数是一个不太常见的URL组件,但是有部分服务器仅从路径名和端口是不足以让服务器提供所需资源,还需要一些参数。参数组件是由键值对组成,一般通过“;”字符和其他组件分隔开。

如:
  ftp://prep.ai.mit.edu/pub/gnu;type=d
该URL里面就包含一个type=d的参数组件。

2.6 查询字符串

很多资源,比如数据库服务,都是可以通过提问题或进行查询来缩小所请求资源类型范围的。一般通过“?”字符同其他组件隔开,

如:
  http://www.joes-hardware.com/inventory-check.cgi?item=12731
里面的item=12731就是一个查询字符串。如果一个查询字符串包含多个查询参数,可以使用"&"隔开,

如:
  http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue

2.7 片段

有些资源类型,比如 HTML,除了资源级之外,还可以做进一步的划分。比如,对一个带有章节的大型文本文档来说,资源的 URL 会指向整个文本文档,但理想的情况是,能够指定资源中的那些章节。
为了引用部分资源或资源的一个片段,URL 支持使用片段(frag)组件来表示一个资源内部的片段。比如,URL 可以指向 HTML 文档中一个特定的图片或小节。

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

3 URL快捷方式

这里所说的“快捷方式”是指一些不完整的URL,如:相对URL,自动扩展等

3.1 相对URL

如果写过前端HTML页面的朋友对这个概念应该不会陌生。大部分HTML文档内的跳转链接都使用了相对URL。所谓的相对URL,就是相对于一个基础URL(baseUrl)。如一个HTML文档的资源URL是http://www.joes-hardware.com/tools.html,该文档内容如下:

<HTML>
<HEAD><TITLE>Joe's Tools</TITLE></HEAD>
<BODY>
<H1> Tools Page </H1>
<H2> Hammers <H2>
<P> Joe's Hardware Online has the largest selection of <A HREF="./hammers.html">hammers
</A> on earth.
</BODY>
</HTML>

这里根据该文档本身的资源URL,可以推断出baseUrl为http://www.joes-hardware.com/。这个文档里面的./hammers.html就是相对URL,一般浏览器解析的时候会自动加上baseURL组成完整的URLhttp://www.joes-hardware.com/hammers.html对其进行访问。

3.2 自动扩展URL

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

  • 主机名扩展:如我们输入baidu,一般浏览器就能自动扩展为www.baidu.com。
  • 历史扩展:如果你之前访问过http://www.joes-hardware.com,如果你再次在浏览器输入joes,它就会自动扩展出完整的URL地址。

4 字符编码

URL为了达到可移植和安全传输的特性,所以URL只能使用一些较小的,相对安全的字母表中的字符。但是一些使用URL的人又希望用一些不在规定字母表中的字符,这个时候就需要对这些字符进行编码转义,然后再进行传输。

4.1 URL字符集

我想从事计算机相关行业的人对US-ASCII 字符集都不会陌生,而且由于其历史悠久,所以可移植性也非常好,但是该字符集对英语语言非常友好,但是对于其他语言比如中文的支持非常不好。URL 的设计者就将转义序列集成了进去。通过转义序列,就可以用 US-ASCII 字符集的有限子集对任意字符值或数据进行编码了,这样就实现了可移植性和完整性。

4.2 编码机制

为了达到上述的目的,传输和使用一些非ASCII字符集的字符或者数据,就设计出了一种编码机制,通过“转义”的方式来表示那些不安全的的字符。其表示方法为:**一个百分号(%),后面跟着两个表示字符 ASCII 码的 十六进制数。**比如:

4.3 字符限制

在 URL 中,有几个字符被保留起来,有着特殊的含义,或者一些其他用途的字符。这些字符一般对使用有限制,除了用在其本身保留使用的场合外,也需要在URL中对齐编码。

5 Scheme

这里列出一些常见的协议和简要说明:

方 案 描  述
http     

超文本传输协议方案,除了没有用户名和密码之外,与通用的URL格式相符。如果省略了端口,就默认为80。基本格式:
http://<host>:<port>/<path>?<query>#<frag>。示例:
http://www.joes-hardware.com/index.html
http://www.joes-hardware.com:80/index.html

https    

方案https与方案http是一对。唯一的区别在于方案https使用了网景的SSL,SSL为HTTP连接提供了端到端的加密机制。其语法与HTTP的语法相同,默认端口为443。
基本格式:https://<host>:<port>/<path>?<query>#<frag>示例:
https://www.joes-hardware.com/secure.html

mailto   

Mailto URL指向的是E-mail地址。由于E-mail的行为与其他方案都有所不同(它并不指向任何可以直接访问的对象),所以mailto URL的格式与标准URL的格式也有所不同。因特网E-mail地址的语法记录在RFC 822中。基本格式:
mailto:<RFC-822-addr-spec>示例:
mailto:joe@joes-hardware.com

ftp    

文件传输协议URL可以用来从FTP服务器上下载或向其上载文件,并获取FTP服务器上的目录结构内容的列表。在Web和URL出现之前FTP就已经存在了。Web应用程序将FTP作为一种数据访问方案使用。URL语法遵循下列通用格式。基本格式:
ftp://<user>:<password>@<host>:<port>/<path>;<params>

rtsp,rtspu    

方案file表示一台指定主机(通过本地磁盘、网络文件系统或其他一些文件共享系统)上可直接访问的文件。各字段都遵循通用格式。如果省略了主机名,就默认为正在使用URL的本地主机。基本格式:
file://<host>/<path>示例:
file://OFFICE-FS/policies/casual-fridays.doc

news    

根据RFC 1036的定义,方案news用来访问一些特定的文章或新闻组。它有一个很独特的性质:news URL自身包含的信息不足以对资源进行定位。news URL中缺乏到何处获取资源的信息——没有提供主机名或机器名称。从用户那里获取此类信息是解释程序的工作。比如,在网景浏览器的“选项”(Options)菜单中,就可以指定自己的NNTP(news)服务器。这样,浏览器有了news URL的时候就知道应该使用哪个服务器了。新闻资源可以从多台服务器中获得。它们被称为位置无关的,因为对它们的访问不依赖于任何一个源服务器。news URL中保留了字符“@”,用来区分指向新闻组的news URL和指向特定新闻文章的news URL。基本格式:
news:<newsgroup>
news:<news-article-id>示例:
news:rec.arts.startrek

telnet   

方案telnet用于访问交互式业务。它表示的并不是对象自身,而是可通过telnet协议访问的交互式应用程序(资源)。基本格式:
telnet://<user>:<password>@<host>:<port>/示例:
telnet://slurp:webhound@joes-hardware.com:23/

永久统一资源定位符PURL :基本思想是在搜索资源的过程中引入另一个中间层,通过一个中间资源定位符(resource locator)服务器对资源的实际URL进行登记和追踪。

第二章、URL与资源的更多相关文章

  1. HTTP 权威指南 第二章 URL 与资源

    前言 这一章节讲述了关于 URL 的相关知识,主要包括下面的内容: URL 语法 URL 快捷方式 URL 编码与字符规则 常见的 URL 方案 URL 的未来——URN URL 语法 一般格式(九个 ...

  2. 【HTTP权威指南】第二章-URL与资源

    [统一资源定位符URL]通过位置来标示资源,其表达的格式如下:https://item.jd.com/523961.html 第一部分(https)是方案,告知客户端要[怎样访问],这里使用的是htt ...

  3. Ruby on Rails Tutorial 第二章 之 用户资源&MVC&REST

    说明:用户资源包括用户数据模型和这个模型相关的Web页面. 1.用户数据模型如下: 2.使用Rails内置的脚手架生成用户资源中,执行如下所示命令: $ rails generate scaffold ...

  4. Artech的MVC4框架学习——第二章URL路由

    总结:HttpModule 和HttpHandler是Asp.net管道的两个重要组件.请求最终处理通过HttpHandler完成.MVC就是通过名为MvcHandler自定义HttpHandler现 ...

  5. Ruby on Rails Tutorial 第二章 之 微博资源

    1.微博模型如下图所示: 2.创建微博资源,命令如下: $ rails generate scaffold Micropost content:text user_id:integer  #生成微博资 ...

  6. Jenkins入门系列之——02第二章 Jenkins安装与配置

    2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...

  7. Asp.Net MVC4 + Oracle + EasyUI 学习 第二章

    Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...

  8. 《驾驭Core Data》 第二章 Core Data入门

    本文由海水的味道编译整理,请勿转载,请勿用于商业用途.    当前版本号:0.4.0 第二章 Core Data入门 本章将讲解Core Data框架中涉及的基本概念,以及一个简单的Core Data ...

  9. 学习opencv中文版教程——第二章

    学习opencv中文版教程——第二章 所有案例,跑起来~~~然而并没有都跑起来...我只把我能跑的都尽量跑了,毕竟看书还是很生硬,能运行能出结果,才比较好. 越着急,心越慌,越是着急,越要慢,越是陌生 ...

随机推荐

  1. Linux装好系统之后配置环境

    1.配置IP地址vi /etc/sysconfig/network-scripts/ifcfg-eth0 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static D ...

  2. JDBC 学习复习10 编写自己的JDBC框架

    首先万分感谢狼哥 孤傲苍狼 博客,整个jdbc学习的博客资料 链接为http://www.cnblogs.com/xdp-gacl/p/4006830.html 详细代码见狼哥博客,列出我学习过程中遇 ...

  3. SIP:100rel 扩展

    SIP:100rel 扩展 100rel扩展即是对中间状态响应的确认(即1xx的响应码).原先在sip里,只有针对invite请求的200ok响应才会有ack,那么当中间状态响应携带重要的会话参数信息 ...

  4. css3flex布局实现商品列表

    首先看图 手机商场经常会有商品列表功能,这样其实可以用flex布局实现 注意两个地方: 1.商品列表平衡间距(flex布局的换行加两端对齐) 2.中间文字行数不一样,会出现下方留下空白,如何解决(fl ...

  5. OGG 自动重启脚本

    6-20 * * * /oggdata/log/oggautorestart.sh >/oggdata/log/crontab_oggautorestart.log 2>&1 [说 ...

  6. Linux学习笔记(十二)VIM编辑器

    一.概述 VI Visual interface 可视化接口,类似于Windows中的记事本 VI->VIM 操作模式: (1)Command mode 命令模式 (2)Insert mode ...

  7. mongodb索引简介

    上面讲解了数据的查询和索引的简单使用,并且说明索引可以显著的加快查询速度,实际上查询的种类有很多,与之对应的索引的种类也有很多,接下来会与索引一起,在说明索引种类的同时,详细介绍下查询的参数 1.索引 ...

  8. Python 文件操作(1)

    今天大佬给了个A文件给我,里面存放了机密数据. 什么机密数据??? 有帅哥的联系方式吗? 赶紧打开来看一下 1.open() 函数基本版 Python大佬有个内置开文件的函数open(), 专门开文件 ...

  9. script标签中的async、defer属性

    Script标签是我们常用的引用js脚本的一种方式. 撸代码的时候,我们常常只写src属性,直接忽略其他属性. 最近发现了2个可以利用的属性:async.defer. 顾名思义async就是异步,在不 ...

  10. 使用Tampermonkey,实现Gitlab禁用自我Merge的功能

    Tampermonkey 简单入门资料:https://blog.csdn.net/gg_18826075157/article/details/78011162 Tampermonkey下载地址:T ...