第二章、URL与资源
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。基本格式: |
https |
方案https与方案http是一对。唯一的区别在于方案https使用了网景的SSL,SSL为HTTP连接提供了端到端的加密机制。其语法与HTTP的语法相同,默认端口为443。 |
mailto |
Mailto URL指向的是E-mail地址。由于E-mail的行为与其他方案都有所不同(它并不指向任何可以直接访问的对象),所以mailto URL的格式与标准URL的格式也有所不同。因特网E-mail地址的语法记录在RFC 822中。基本格式: |
ftp |
文件传输协议URL可以用来从FTP服务器上下载或向其上载文件,并获取FTP服务器上的目录结构内容的列表。在Web和URL出现之前FTP就已经存在了。Web应用程序将FTP作为一种数据访问方案使用。URL语法遵循下列通用格式。基本格式: |
rtsp,rtspu |
方案file表示一台指定主机(通过本地磁盘、网络文件系统或其他一些文件共享系统)上可直接访问的文件。各字段都遵循通用格式。如果省略了主机名,就默认为正在使用URL的本地主机。基本格式: |
news |
根据RFC 1036的定义,方案news用来访问一些特定的文章或新闻组。它有一个很独特的性质:news URL自身包含的信息不足以对资源进行定位。news URL中缺乏到何处获取资源的信息——没有提供主机名或机器名称。从用户那里获取此类信息是解释程序的工作。比如,在网景浏览器的“选项”(Options)菜单中,就可以指定自己的NNTP(news)服务器。这样,浏览器有了news URL的时候就知道应该使用哪个服务器了。新闻资源可以从多台服务器中获得。它们被称为位置无关的,因为对它们的访问不依赖于任何一个源服务器。news URL中保留了字符“@”,用来区分指向新闻组的news URL和指向特定新闻文章的news URL。基本格式: |
telnet |
方案telnet用于访问交互式业务。它表示的并不是对象自身,而是可通过telnet协议访问的交互式应用程序(资源)。基本格式: |
永久统一资源定位符PURL :基本思想是在搜索资源的过程中引入另一个中间层,通过一个中间资源定位符(resource locator)服务器对资源的实际URL进行登记和追踪。
第二章、URL与资源的更多相关文章
- HTTP 权威指南 第二章 URL 与资源
前言 这一章节讲述了关于 URL 的相关知识,主要包括下面的内容: URL 语法 URL 快捷方式 URL 编码与字符规则 常见的 URL 方案 URL 的未来——URN URL 语法 一般格式(九个 ...
- 【HTTP权威指南】第二章-URL与资源
[统一资源定位符URL]通过位置来标示资源,其表达的格式如下:https://item.jd.com/523961.html 第一部分(https)是方案,告知客户端要[怎样访问],这里使用的是htt ...
- Ruby on Rails Tutorial 第二章 之 用户资源&MVC&REST
说明:用户资源包括用户数据模型和这个模型相关的Web页面. 1.用户数据模型如下: 2.使用Rails内置的脚手架生成用户资源中,执行如下所示命令: $ rails generate scaffold ...
- Artech的MVC4框架学习——第二章URL路由
总结:HttpModule 和HttpHandler是Asp.net管道的两个重要组件.请求最终处理通过HttpHandler完成.MVC就是通过名为MvcHandler自定义HttpHandler现 ...
- Ruby on Rails Tutorial 第二章 之 微博资源
1.微博模型如下图所示: 2.创建微博资源,命令如下: $ rails generate scaffold Micropost content:text user_id:integer #生成微博资 ...
- Jenkins入门系列之——02第二章 Jenkins安装与配置
2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...
- Asp.Net MVC4 + Oracle + EasyUI 学习 第二章
Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...
- 《驾驭Core Data》 第二章 Core Data入门
本文由海水的味道编译整理,请勿转载,请勿用于商业用途. 当前版本号:0.4.0 第二章 Core Data入门 本章将讲解Core Data框架中涉及的基本概念,以及一个简单的Core Data ...
- 学习opencv中文版教程——第二章
学习opencv中文版教程——第二章 所有案例,跑起来~~~然而并没有都跑起来...我只把我能跑的都尽量跑了,毕竟看书还是很生硬,能运行能出结果,才比较好. 越着急,心越慌,越是着急,越要慢,越是陌生 ...
随机推荐
- Go 代码风格和规范
Go 语言写起来类似于C语言,因此熟悉C语言及其派生语言(C++.C#.Objective-C 等)的人都会迅速熟悉这门语言 编码风格 标识符命名规范 在习惯上,Go语言程序员推荐使用驼峰式命名,当名 ...
- sql 批量插入
create PROCEDURE insertinto as begindeclare @id int;set @id=1;while @id<10begininsert into perso ...
- Navicat MySql 连不上 本地开发环境 MySQL8.0
原因: 新版mysql数据库的加密方式改变,进而导致Navicat连接输入的密码不能与安装时输入的密码匹配,那如何解决这个问题呢?很简单,只需要一句代码的事儿~ 1.打开MySQL 8.0 Com ...
- JavaScript-- 基础知识面试题
1.JavaScript语言特点 1.弱类型,数据类型由数据的值决定 2.解释性脚本语言--解释器是JS引擎 是浏览器的一部分 3.运行在客户端浏览器上 4.有事件驱动机制(按下鼠标,移动窗口等) 5 ...
- Matplotlib介绍
目录 一. Matplotlib介绍 1 二. 初级绘制 1 1. 绘图简介 1 2. 在上面的过程中,主要就是下面三个元素: 1 三. 2D各种 ...
- (转载)小白的linux设备驱动归纳总结(一):内核的相关基础概念---学习总结
1. 学习总结 小白的博客讲的linux内核驱动这一块的东西比较基础,因此想通过学习他的博客,搭配着看书的方式来学习linux内核和驱动.我会依次更新在学习小白的博客的过程的感悟和体会. 2.1 内核 ...
- 一分钟了解Linux文件系统
Linux文件系统原理在所有的操作系统中文件都有文件名与数据,在Linux系统上文件系统分成两个部分:用户数据 (user data) 与元数据 (metadata).用户数据,即文件数据块 (dat ...
- Map集合中get不存在的key值
返回的值是null 测试代码 import java.util.HashMap; import java.util.Map; public class Test { public static voi ...
- 【Java基础-实验7】Banking_7 -添加银行透支扣款系统的 thorw异常机制
实验基本要求: 实验题目 7:(在6基础上修改) 将建立一个 OverdraftException 异常,它由 Account 类的withdraw()方法 抛出. 实验目的: 自定义异常 实验说明: ...
- ggplot2入门与进阶(上)
出处:http://www.cellyse.com/how_to_use_gggplot2_part1/ ggplot2包是基于Wilkinson在<Grammar of Graphics> ...