什么是URL?

所有的东西都有一个标准化的东西,公交有线路号,飞机有航班号,个人有身份证号,你坐出租车,告诉司机师傅我要到石牌华师,他就能明白你的意思了。URL就是因特网资源的标准化名称。URL指向一条电子信息片段,告诉你它们位于何处,以及如何与他们进行交互。

URI

统一资源标识符(Uniform Resource Identifier,URI)是一类更通用的资源标识符,它包括URL和URN。URL是通过描述资源的位置来标识资源的,而URN是通过名字来识别资源的,与它们当前所处的位置无关。

URL语法

我们普通时候遇到的大部分的URL(比如”http://soccer.hupu.com/germany“)是由三部分组成的:方案(http)、主机(soccer.hupu.com)、路径(/germany)。URL的语法随方案的不同而有所不同!大多数URL方案的URL语法都建立在由9部分构成的通用格式上:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

不过几乎没有哪个URL包含所有这些组件。

方案

首先我们来看看什么叫方案。

方案实际上是规定如何访问指定资源的主要标识符,它会告诉负责解析URL的应用程序应该使用什么协议。我们最常用的http(目前大部分浏览器都会帮你省略掉这个部分)、https(http的安全版)、ftp等等。

方案名是不区分大小写的,也就是说”http://www.google.com“和”HTTP:www.google.com“是等价的(你可以去你的浏览器里去试一下)。

主机与端口

我们要访问因特网上的资源,要知道是哪台机器装载了该资源,以及在该机器的什么位置可以找到该资源,这就是URL内主机与端口提供的信息。我们可以用主机名(www.hupu.com)或者IP地址(112.90.32.241)来表示主机名。端口组件标识了服务器正在监听的端口,http的默认端口为80,https的默认端口为443。

用户名和密码

用户和密码组件通常出现在ftp协议中。

ftp://ftp.prep.ai.mit.edu/pub/gnu这个例子中没有用户和密码组件。当URL方案要求输入用户名和密码时,它会插入anonymous作为你的用户名,并发送一个默认密码。

ftp://anonymous@ftp.prep.ai.mit..edu/pug/gnu该例子中显示了一个指定的用户名anonymous。字符@讲用户和密码组件与URL的其他部分分隔开来。

ftp://anonymous:my_password@ftp.prep.ai.mit.edu/pub/gnu指定了用户名和密码,由”:”分。

路径

就像PC中文件路径一样。每个路径都有自己的参数。

参数

URL中的参数组件是名值对列表,由字符”;”将其与URL的其他部分分隔开来。它们为应用程序提供了访问资源所需要的附加信息。ftp://ftp.prep.ai.mit.edu/pub/gnu;type=d

能看出上述例子中的参数名是什么,参数的值是什么吗?

查询

我们用一个例子来说明http://bbs:scoccer.com/15630262.html?item=123。这个例子中?右边的内容就是查询组件。我们通过查询组件来缩小所请求资源的范围。

我们一般用“名/值”的方式来查询,名值对之间用&分隔:http://bbs:scoccer.com/15630262.html?item=123&color=blue

片段

URL支持用片段组件来表示一个资源内部的片段,如HTML文档中一个特定的图片和小节。比如:

http://bbs:scoccer.com/15630262.html#robben

*HTTP服务器处理整个对象,而不是对象的片段,从服务器返回的是整个资源后,由客户端的浏览器来显示你感兴趣的片段。

URL快捷方式

URL有两种方式:绝对的和相对的。我们一般见到的都是绝对URL。而相对URL是URL的一种便捷缩略记法,是URL的片段或者一小部分。有过开发经验的应该也都见过。我们来看一下一个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 the earth.</P> <H2><A NAME=drills></A>Drills</H2> <P>Joe's Hardware has a complete line of cordless and corded drills,
as well as the latest in plutonium-powered atomic drills, for those
big around the house jobs.</P> ... </BODY> </HTML>

其中 ./hammers.html就是一个相对路径。
既然说是相对路径,那它肯定有个相对的对象。这个对象就是所谓的基础URL。这个例子中,基础URL是http://www.joes-hardware.com/tools.com。那么基础URL是怎么来的呢。

1、在资源中显示提供。比如HTML文档中可能会包含一个定义了基础URL的标记<BASE>

2、封装资源的基础URL。如果没有显式指定基础URL,可以将它所属资源的URL作为基础。

3、没有基础URL。通常意味这是一个绝对URL,当然也有可能这个URL是不完整的。

那么我们如何将一个相对的URL转换为绝对的URL呢?我们看下面这个图。

我们对./hanmmers.html使用图中的算法。

1)路径为./hammmers.html,基础URL为http://www.joes-hardware.com/tools.html

2)方案为空,继承基础URL的方案(HTTP)

3)组件为空,继承主机和端口组件

4)将相对URL和继承的组件合并:http://www.joes-hardware.com/hammmers.html。

自动扩展URL

主机名扩展

《HTTP权威指南》中说我们在地址栏中输入yahoo,就会自动在主机名中插入www.和.com,不过目前我还没有找到对应的例子

历史扩展

这个我们日常中用的很多了,通过我们访问过的网站,浏览器会自动帮我们提供一些完整的选项供我们选择。

未来

我们已经知道URL提供的是我们所需资源所处的位置,它的缺点是,一旦该资源被移走,我们就不能通过URL对该资源进行定位了。我们解决方案正式前面提到的URN。

URN(uniform resource name)统一资源名。其思想是在资源搜索的过程中引入另外一个中间层,通过一个中间资源定位符,服务器对资源的实际URL进行登记和跟踪,这样不管我们的资源被移动到了何处,只要它没有被删除,定位符就可以以这个资源重定向到所请求资源的实际URL中去。不过想要取代URL还需要一定的时间,这也不是Web开发中的紧迫问题。

HTTP学习笔记——URL与资源的更多相关文章

  1. 《HTTP权威指南》学习笔记——URL和资源

    URL与资源 URL是互联网资源的标准化名称 1.浏览互联网资源 URL是浏览器寻找信息时所需的资源位置 URI是一类更通用的资源标识符,URL是它的子集. URI的两个子集:URL和URN URL提 ...

  2. HTTP学习之URL与资源

    URL是因特网资源的标准化名称,该字符串指向一条电子信息片段,定义服务端应用程序在什么位置以及客户端要如何与其交互 一条完整的URL由多个片段组成. 通用URL组件 方案 以哪种协议访问服务器 用户 ...

  3. HTML 学习笔记(URL)

    URL也被称为网址 URL可以由单词组成,比如"www.baidu.com" 或者是因特网协议IP地址:192.168.1.253.大多数人在网上冲浪时,会键入网址的域名,因为名称 ...

  4. Web.py 框架学习笔记 - URL处理

    最近由于工作需要开始学习基于python的web应用框架web.py.为了方便学习,将学习心得逐日记下以便日后复习. URL 模板: web.py提供了一套url处理的模板,在python工程中,只需 ...

  5. Docker学习笔记_网上资源参考

    Docker学习,网上资源参考 1.菜鸟教程:                                                        http://www.runoob.com ...

  6. [爬虫学习笔记]Url过滤模块UrlFilter

            Url Filter则是对提取出来的URL再进行一次筛选.不同的应用筛选的标准是不一样的,比如对于baidu/google的搜索,一般不进行筛选,但是对于垂直搜索或者定向抓取的应用,那 ...

  7. android学习笔记37——Menu资源

    Menu菜单资源 android应用推荐使用XML来定义菜单,其可提供更好的解耦方式. 菜单资源通常位于res/menu文件夹下,其菜单根元素为<menu.../>,menu元素下可包含子 ...

  8. android学习笔记35——AnimationDrawable资源

    AnimationDrawable资源 AnimationDrawable,代表一个动画. android既支持传统的逐帧动画(类似于电影方式,一张图片一张图片的切换),也支持通过平移.变换计算出来的 ...

  9. android学习笔记34——ClipDrawable资源

    ClipDrawable ClipDrawable代表从其他位图上截取一个“图片片段” 在XML文件中定义ClipDrawable对象使用<clip.../>元素,该元素的语法为: 以上语 ...

随机推荐

  1. [转]iOS UIAppearance使用详解

    在iOS 5以前,自定义原生控件的外观并没有原生支持,因此开发人员感觉很麻烦.开发人员经常面临的问题是修改一个控件所有实例的外观.解决这个问题的正确方法是重写一遍控件.但由于这么做非常费时,一些开发人 ...

  2. J2SE知识点摘记(二十一)

    实现原理 前面已经提了一下Collection的实现基础都是基于数组的.下面我们就已ArrayList 为例,简单分析一下ArrayList 列表的实现方式.首先,先看下它的构造函数. 下列表格是在S ...

  3. delphi高手突破学习笔记之面向对象类和对象的本质

    知识点1:堆和栈 每个应用程序可以获得的内存空间分为两种:堆(heap)和栈(stack). 堆又称为“自由存储区”,其中的内存空间的分配与释放是必须由程序员来控制的.例如,用GetMem函数获取了一 ...

  4. [置顶] Android系统移植与调试之------->如何修改Android设备状态条上音量加减键在横竖屏的时候的切换与显示

    这两天由于一个客户的要求,将MID竖屏时候的状态条上的音量键去掉.所以尝试修改了一下,成功了,分享一下经验. 先看一下修改后的效果图,如下所示 . 横屏的时候:有音量加减键 竖屏的时候:音量加减键被去 ...

  5. 面向对象程序设计-C++_课时24多态的实现

    所有带virtual的类的对象,里面最上面有一个隐藏的指针vptr,指向一张表vtable #include <iostream> using namespace std; class A ...

  6. C++ *max_element函数找最大元素 *min_element函数找最小元素 STL算法(转)

    http://blog.sina.com.cn/s/blog_6f3a860501019z1f.html #include<iostream> #include<algorithm& ...

  7. android可拖动排序GridView实现

    经常使用今日头条.网易新闻的同学们应该都会注意到用于管理多个频道的可拖动排序GridView,下面介绍一下可拖动的DragGridView的实现方法.代码放在GitHub上https://github ...

  8. 二叉树的实现 -- 数据结构与算法的javascript描述 第十章

    /** * 树,一种非线性的数据结构. 以分层的方式存储数据. * 一棵树最上面的节点成为根节点,如果一个节点下面有多个节点,这个节点称为父节点,下面的节点称为子节点 * 没有任何子节点的节点,陈宝国 ...

  9. <转>机器学习笔记之奇异值分解的几何解释与简单应用

    看到的一篇比较好的关于SVD几何解释与简单应用的文章,其实是有中文译本的,但是翻译的太烂,还不如直接看英文原文的.课本上学的往往是知其然不知其所以然,希望这篇文能为所有初学svd的童鞋提供些直观的认识 ...

  10. <转>ASP.NET学习笔记之在ASP.NET MVC中使用DropDownList

    看到一篇关于dropdownlist的用法很好的阐述,比较清楚,留着,防止以后自己不记得,还可以瞅瞅. 在ASP.NET MVC中,尽管我们可以直接在页面中编写HTML控件,并绑定控件的属性,但更方便 ...