HTTP学习笔记01-URL
1.URI
明确几个概念:
- **URI:**Uniform Resource Identifier 统一资源标识符
- **URL:**Uniform Resource Locater 统一资源定位符
- **URN:**Uniform Resource Name 统一资源命名
这仨玩意儿长得差不多,严格来说,URI包括两种,一种是URL,一种是URN. 也就是说现在最常用的URL是URI的一个子集.
而URL和URN的区别,从名字上就能看出来.
- URL是以资源的位置(location)来定位一个资源的.
- URN是以资源的名称来定位资源.
举个例子,比如我要找某个RFC文档,通过URL的话,可以标记为:ftp://www.ietf.com/rfc/rfc2041.txt
而是用URN标识的话就可以写成,urn:ietf:rfc:rfc2041
URN的技术瓶颈在于,需要一套完善的资源定位服务器来实现资源名称的解析. URN是未来发展的一个趋势,它可以只考虑文件的名称,而不用考虑其物理存储位置(是不是类似磁力链接的一个玩意儿. )但是URN像IPv6一样,是一个美好的未来,但目前来看也仅仅是一个未来. 所以,目前说到URI暂时就可以理解为URL.
2.URL语法
可能我们都知道http://www.thecatcher.net/index.html
这样的的URL,但是如果URL如果仅仅是这样的话,怎么体现URL的牛逼之处. 下面这个是URL的完整语法格式.
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
- scheme: 方案,可以理解为一个协议名,之名该URL所使用的协议. 大小写无关.
- 主机和端口
- 用户名和密码:这一部分是可选的
http://joe:joespasswd@www.joes-hardware.com/sales_info.txt
比如像这个样子 - 路径
- 参数:提供一些参数 比如
ftp://prep.ai.mit.edu/pub/gnu;type=d
提供了一个type参数,其value是d. 路径可以分成若干段,每段都可以有自己的参数. 比如http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true
- 查询字符串:通过?标识,提供一些可用于查询的参数.不同的查询字符串之间可以通过&隔开.
http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue
- 片段: HTML的锚点就是一个所谓的片段,用于表示一个完整资源中的一部分. 一般情况下,服务端只处理完整的资源,而这个片段的参数是交给客户端来处理的.
相对URL和绝对URL
URL分为绝对URL和相对URL. 绝对URL就是包含所有信息的一个URL. 而相对URL是相对于一个base URL来说的. 相对URL是不完整的在解析的时候需要和对应的base URL拼接在一起才能找到对应的资源.
相对URL
要使用相对URL的前提是能够得知其所对应的base URL. base URL可以来自三个地方:
- 在资源中显式的指定. 比如使用<base>
标签
- 在一个没有显示指定base的资源中,发现了一个相对URL,那么就以该资源自身所属的URL作为base. 比如你在一个html文件路径是(/home/www/html/test.html)中指定了一个图片<img src="./hot.jpg"
那么在解析时,会使用该文件所在的路径作为base即 /home/www/html/(说的有点玄乎,其实就是个相对路径啦)
相对URL的解析
URL的常用协议
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>
示例:
ftp://anonymous:joe%40joes-hardware.com@prep.ai.mit.edu:21/pub/gnu/
rtsp,rtspu
RTSP URL 是可以通过实时流传输协议(Real Time Streaming Protocol)解析的音 / 视频媒体资源的标识符。方案 rtspu 中的 u 表示它是使用 UDP 协议来获取资源的。
基本格式:
rtsp://<user>:<password>@<host>:<port>/<path>
rtspu://<user>:<password>@<host>:<port>/<path>
示例:
rtsp://www.joes-hardware.com:554/interview/cto_video38
file
方案 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/
展望美好的未来…
URL可以准确的定位到资源,但是,他是一种不稳定的定位方式. 最简单的,如果我的文件换了位置,那么就必须更新对应的url. 那些活在教科书中被我们瞻仰的学院派的专家大神们,他们一直致力于让这个世界便的更加完美.于是他们提出了URN的概念. 也就是说,资源只与其名称相对应,而不需要考虑物理存储位置. 知道了资源的名称,也就可以找到对应的资源. (有点像磁力链接…)
目前IETF提出了一个可以向下兼容URL的方案,PURL(persistent uniform resource locators),这个方案在请求URL的客户端和服务器之间增加一个中间件. 该中间服务器上记录着永久RUL和资源实际地址的映射. 这样的话每次客户端只需要使用固定的URL 在中间件上请求资源就可以了.
但是从URL到URN的过渡是个极其庞大的工程.(貌似IP4to6也是这么说…)最主要的,URL的应用如此广泛,即使它有着一丢丢的小问题,大家也早就接受了,由于URL的使用太广泛了(IPv4也是)过渡到URN如果没有完善的兼容URL方案的话,几乎是件不可能的事情.
所以展望的未来,或许仅仅是个遥远的未来吧.
HTTP学习笔记01-URL的更多相关文章
- 软件测试之loadrunner学习笔记-01事务
loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...
- thinkphp学习笔记6—url模式
原文:thinkphp学习笔记6-url模式 入口文件是应用的唯一入口,因为可以多入口,每个应用可以对应一个入口文件,系统会从rul参数中解析当前请求的模块,控制器,操作.ThinkPHP是区分大小写 ...
- C++ GUI Qt4学习笔记01
C++ GUI Qt4学习笔记01 qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...
- SaToken学习笔记-01
SaToken学习笔记-01 SaToken版本为1.18 如果有排版方面的错误,请查看:传送门 springboot集成 根据官网步骤maven导入依赖 <dependency> < ...
- Redis:学习笔记-01
Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...
- PHP 学习笔记 01
例子: 为什么要学PHP 主观原因: 前段时间在学校处理了毕业的一些事情,回到上海后开始了找工作的旅程.意向工作是WPF开发或者ASP.NET 作为后端的WEB开发. 陆陆续续一直在面试,其中有一家公 ...
- vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍
这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...
- HTTP学习笔记01
参考内容: 关于HTTP协议,一篇就够了 理解HTTP协议 HTTP 协议入门 超文本传输协议- 维基百科,自由的百科全书 HTTP 昨天通过读文档.读博文.看教程学习了一下HTTP协议,发现真是“天 ...
- xml基础学习笔记01
注意:刚刚看了网上对于XML中的标签,节点和元素?到底应该怎么表述?起初我也有这个疑惑,现在我的想法是:下面出现node的应称作节点,节点对象.element应称作元素,毕竟这更符合英文的本意.至于标 ...
- Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net
Ext.Net是一个对ExtJS进行封装了的.net控件库,可以在ASP.NET WebForm和MVC中使用.从今天开始记录我的学习笔记,这是第一篇,今天学习了如何在WebForm中使用Ext.Ne ...
随机推荐
- postgresql on centos (sequelize+pg+nodejs):Failed to find PostgresSQL server.Pleast double check your settings
公司的一个项目,使用的nodejs做服务端,数据库是postgresql,在本地时一切ok,放在centos时,postgresql配置ok,可以远程访问,但是nodejs在centos启动时,就会报 ...
- 离散数学及其应用(Discrete Mathematica With Application 7th)学习笔记 第一章
目前本人只进行到了第五章的章末补充练习,应该是从4月6号开始学习的,又是英文版,而且基本就下班回家抽2个小时左右去学,所以进度较慢. 由于本质是数学,除了一些程序处理和大计算量的问题,基本上一本草稿本 ...
- git Staging Deleted files
Use git rm foo to stage the file for deletion. (This will also delete the file from the file system, ...
- MathType可以编辑省略号吗
说到省略号大家可能会想到写文章的时候会用到,其实在数学中也会常常的使用到.当数学过程是重复有规律性的过程时,就会用到它.MathType是一款数学公式编辑器,那么,在数学公式中,MathType编辑时 ...
- pyhon多进程知识整理
多进程概要: 在Unix/Linux下,可以使用fork()调用实现多进程. 要实现跨平台的多进程,可以使用multiprocessing模块. 进程间通信是通过Queue.Pipes等实现的. 要让 ...
- iOS面试题--Model层--沙盒的目录结构是怎么样的?各自一般用于什么场合?
沙盒的目录结构是怎么样的?各自一般用于什么场合? 一.iOS沙盒机制 iOS的应用只能访问为该应用创建的区域,不可访问其他区域,应用的其他非代码文件都存在此目录下,包括图片,属性文件plist,bun ...
- Handler机制原理
andriod提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange). 1)Loo ...
- [转]Excel关闭进程
原文地址:http://www.cnblogs.com/feishu/archive/2010/05/08/1730797.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- hoj 2715 (费用流 拆点)
http://acm.hit.edu.cn/hoj/problem/view?id=2715 将每个格子 i 拆成两个点 i’, i’’并加边(i’, i’’, 1, -Vi), (i’, i’’, ...
- poj1026(置换找循环节)
找到循环节,然后对应的变换 Cipher Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20377 Accepted: ...