菜鸟笔记
提升您的技术认知

HTTP URL与资源

阅读 : 25

      这里先简单的说下URI,URL,URN之间的关系吧,其实上次笔记也说过,URN与URL都是URI的子集,URN是未来资源定位的理想型态,可以直接通过资源名(URN)寻找到所需要资源,而不用关心这个资源到底处于网络上哪个位置。而URL是现在最通用的资源定位方式。

      URL的基本结构:

      URL基本有三个部分

  1. 第一部分:URL方案,也就是所谓的scheme,具体的来说也就是URL中的http等的东西,他告诉web客户端怎么去访问资源。
  2. 第二部分:服务位置,他告诉web客户端资源在哪里

第三部分:资源路径,路径说明的请求的是服务器上那个特定的本地资源。

     URL可以通过HTTP之外的协议访问资源,他们可以指向网上任意的资源,或者个人e-mail。

     这里闲扯一段历史(个人爱好(¯﹃¯)),在URL出现之前,人们是使用神马来定位的呢,其实是FTP,需要进过种种繁杂的操作步骤人们才能找到自己想要的资源,看到现在这么方便的获取资源,真的是技术改变生活啊。

     URL的基本格式:

     ://:@:/;?#

     下面介绍下每个部分:

     方案(使用什么协议):

     方案是规定如何访问指定资源的主要标识符,他负责告诉解析URL的应用程序用什么协议

     方案必须以一个字母符号开始,有第一个“:”将其与URL的其余部分分割开来,方案名是与大小写无关的,因此http与HTTP都没有区别

     主机与端口:

     主机标识了网上能够访问资源的宿主机器,可以用主机名或者IP表示主机名,端口标志了服务器正在监听的网络端口,对下层使用了TCP协议的HTTP来说,默认端口为80.

    用户名与密码:

   很多服务器都需要用户输入用户名与密码才能访问数据,FTP服务器就是这样一个常见的例子:

   ftp://littlewhite:white@ftp.test.edu/pub/gnu

   这里ftp是协议名,littlewhite是用户名,white是密码,ftp.test.edu是主机名,后面的是路径,他也遵守URL的基本格式。

    路径:

    URL的路径说明了资源位于服务器的什么地方,路径通常很像一个服务器的文件系统路径,比如:

    /img/baidu_sylogo1.gif

    路径可以用字符“/”将HTTP URL的路径组件分为一些路径段,每个路径段都可以有自己的参数。

    参数:

    为了想应用程序提供它们所需要的输入参数,URL中有一个参数组件,这个组件就是URL中的名值对列表,由字符“;”将其与URL其他部分分割开来,它们为应用程序提供了访问资源所需要的附加信息。比如:

    http://www.baidu.com/test;type=d

    这个例子中,有一个参数type=d,名字为type,值为d。

    前面也说过,HTTP URL路径可以分为若干个路径段,每个都有自己的参数,比如:

    http://www.baidu.com/test;type=d/test2;type=r

    查询字符串:

    这个东西在我们平时的web开发中经常遇到,先上例子:

    http://www.baidu.com/test?name=littlewhite

    上面这个例子?的后面就是所谓的查询字符串了,服务器可以解析这个查询字符串,获取他所带的信息,加以利用。

    片段:

    这个东西我们平时比较少会遇到,它是做什么的呢?有些资源,如HTML页面,在资源及之外还可以进行进一步的细分,比如我想浏览一个格式为HTML的页面的一个特定位置,如果没有片段的话我们可能需要先获取整个HTML页面,再进行定位,但是使用了片段的话,可以再发送URL时候就对HTML内部进行定位,比如:

   http://www.baidu.com/test.html#drills

    发送这个请求之后,服务器仍会处理整个对象,而不是对象的片段,也就是说服务器仍会返回完整的test.html页面,但当客户端能打开这个页面的时候会自动跳到drills这个部分。也就是说片段这个东西其实是对客户端用的

    URL相对路径和绝对路径:

    这个部分建议参考这篇 https://www.coonote.com/note/absolute-path-relative-path.html 这里对于相对路径和绝对路径有比较详细的介绍,当然这个博文说的是文件系统的,而URL的相对路径与绝对路径类似,但有几点需要强调下:

  • 相对路径需要用基础URL进行补完,有些时候有些资源会显示的指定基础URL,如在HTML页面中指定,通过它来转换这个页面的相对路径。
  • 如果没有显示的制定基础URL的话,那么会以当前的页面的位置作为基础URL进行相对路径补完。

   解析相对URL流程图:

下面来个例子:

解析相对路径./test2.html (从页面http://www.baidu.com/test1.html访问)

  1. 路径为./test2.html,基础为http://www.baidu.com/test1.html
  2. 相对路径方案为空,沿着图标的左半边向下处理,继承基础URL方案(HTTP)。
  3. 至少一个组件为非空,一直处理到低端,继承主机和端口。
  4. 将来自相对URL的组件与我们继承来的组件进行组合,得到http://www.baidu.com/test2.html

令人蛋疼的字符问题:

     如上面所说的,URL是可以再各种协议中使用的,也就是说无论任何协议都可以准确安全的传送到目的地,者流就有个问题了:有些协议会剥去一些特定的字符做专门的用途,可以参考类似于我们在编程中经常遇到的关键字符什么的,而URL既要保证所有协议传输时都不能出问题,又要保证URL对人类来说有可阅读性,而且还有完整性,要求非常非常的多,这时转义机制就华丽丽的诞生了~

   URL使用的是US-ASCII,但是这个字符主要针对的是英文,随着互联网的发展,各种类别的语言都有了通过URL传输的需求,而且也有二进制传输的需求等等,为了避开安全字符集带来的限制,人们设计了一种编码机制,用来表示URL中各种不安全的字符,这种转义方法包含了一个百分号(%),后面跟着两个字符ASCII码的十六进制数,下面举个例子:

  空格  ASCII码:32(0x20) http://www.baidu.com/i%20love%20you 这个就等于不安全的 http://www.baidu.com/i love you 了

字符限制:

  在URL中,有几个字符是被保留起来的,有着特殊的含义,这个具体的可以在网上查到,就不一一列举了。

各种方案:

  这里列举一些比较常见的方案:

  • http 超文本传输协议方案,除了没有用户名和密码外,与通用的URL格式相似,如果省略了端口的话,默认为80。
  • https 这个与http是一对,唯一区别就是https方案使用了网景的SSL,SSL为HTTP连接提供了端到端的加密机制,语法与HTTP语法相同,默认端口为443.

关于URL的未来:

    之前提到过URN这个东西,URN这个东西非常强大,因为如果你能使用URN那么你将不需要知道资源的具体位置在哪个服务器上,我们只需要输入目标资源的URN,就可以在透明的情况下找到我们所需要的资源,这就想说我现在想要知道小明童鞋现在在世界的哪里,把它直接传送到我面前,那么他就可以直接过来了。现在存在一种伪URN,就是将目标资源所谓的编码交给使中间服务器进行查找,将查找到的资源的整合返回,感觉有点类似于搜索吧。