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. mysql 树结构递归处理

    日常开发中我们经常会遇到树形结构数据处理,一般表结构通常会常用id,pid这种设计方案. 之前用oracle.sqlServer数据库,用相应的语法即可获取树形结构数据(oracel:connect ...

  2. 数据库与MySQL进阶(4)

    1,事务 事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚. 1.1 ACID四大特性 原子性(Atomicity) 事务被视为不 ...

  3. 七、Flex 布局

    布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. 2009年,W3C 提出了一种新 ...

  4. springboot mvc自动配置(三)初始化mvc的组件

    所有文章 https://www.cnblogs.com/lay2017/p/11775787.html 正文 在springboot mvc自动配置的时候,获得了DispatcherServlet和 ...

  5. Array + two points leetcode.18 - 4Sum

    题面 Given an array nums of n integers and an integer target, are there elements a, b, c, and d in num ...

  6. centos 6升级 GCC 到4.8

    centos 6升级 GCC 到4.8   安装最新版本的swoole 提示 pecl install swolle ... GCC 4.8 or later required. 首先想到的时候yum ...

  7. 【Redis】事务 (超详细)

    一.概述 二.相关命令列表 2.1 MULTI 2.2 EXEC 2.3 DISCARD 2.4 WATCH key [key ...] 2.5 UNWATCH 三.命令示例 3.1 事务被正常执行 ...

  8. Scrapy 中常用的中间件和管道组件

    Pipeline用法 储存到MongoDB pipline.py中的代码 import pymongo class MongoPipeline(object): def __init__(self, ...

  9. [Agile][Scrum][敏捷开发][DevOps中的持续性测试]一些相关流程的梳理

    结合相关资料,做一下梳理 1. 所有的计划任务都是从任务看板(backlog)开始 从backlog中可以看到燃尽图(burndown Chart)来监控项目的进度情况 一个好的看板能够清晰的观测到当 ...

  10. C语言计算两个日期间隔天数

    在网上看到了一个C语言计算日期间隔的方法,咋一看很高深,仔细看更高神,很巧妙. 先直接代码吧 #include <stdio.h> #include <stdlib.h> in ...