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,该文档内容如下:

  1. <HTML>
  2. <HEAD><TITLE>Joe's Tools</TITLE></HEAD>
  3. <BODY>
  4. <H1> Tools Page </H1>
  5. <H2> Hammers <H2>
  6. <P> Joe's Hardware Online has the largest selection of <A HREF="./hammers.html">hammers
  7. </A> on earth.
  8. </BODY>
  9. </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. Servlet实现图片读取显示

    1.导入jar包:commons-io-1.4.jar 2.index.jsp: <%@ page language="java" import="java.uti ...

  2. meta标签常见浏览器设置

    一.如何让双核浏览器默认选择 WebKit 内核渲染自己开发的网页 我们可以使用标签来指定适合自己网站的渲染内核名称,当双核浏览器访问本网页时,就会根据我们的指示,选择我们指定的渲染内核来处理网页.若 ...

  3. #LOF算法

    a.每个数据点,计算它与其他点的距离 b.找到它的K近邻,计算LOF得分 clf=LocalOutlierFactor(n_neighbors=20,algorithm='auto',contamin ...

  4. Android开发之图像处理那点事——滤镜

    在Android开发中,一般对图像的处理就是Bitmap(位图),它包含了图像的全部数据,即点阵和颜色值,点阵就是包含像素点的矩阵,而颜色值就是ARGB,分别代表透明.红色.绿色.蓝色通道,它们共同决 ...

  5. vagrant 搭建开发环境

    虚拟机盒子地址 https://app.vagrantup.com/boxes/search vagrant init hirocom/centos7.2vagrant up 修改配置 config. ...

  6. 【Zookeeper】 在Java中的操作

    一.基本功能演示 1.1 Maven依赖信息 1.2 代码演示 方法说明 1.3 创建Zookeeper节点信息 二.Watcher 2.1 什么是Watcher接口 2.2 Watcher代码 一. ...

  7. 3.Vue过滤器

    1.概念: Vue.js 允许你自定义过滤器,可被用作一些常见文本的格式化,过滤器可以用在两个地方:mustache 插值和 v-bind 表达式.过滤器应该被添加在 JavaScript 表达式的尾 ...

  8. Paper Reading:word2vec Parameter Learning Explained

    论文:word2vec Parameter Learning Explained 发表时间:2016 发表作者:Xin Rong 论文链接:论文链接 为了揭开Word2vec的神秘面纱,不得不重新整理 ...

  9. WPF多值绑定及多值转换(MultiBinding和IMultiValueConverter)

    WPF可以使用MultiBinding进行多值绑定,使用IMultiValueConverter进行多值转换 例: (1)转换器 public class ContentConverter : IMu ...

  10. linux目录太长怎么办?分享一点小技巧

    在linux使用cd的时候,可能会遇到目录比较深的时候,这个时候总是cd一个很长的目录会很麻烦,那有没有什么比较方便的方法呢? 若是在两个目录中来回切换,这个时候可以使用cd - 这个命令,可以完成在 ...