• http权威指南学习笔记(二)


                                                                  URL与资源

          我又回来做笔记啦,书已经看了好几章了,感觉确实学习了很多东西,弄明白了很多原来相对模糊的东西,不过感觉这本书确实理论性比较强,前几章类似于HTTP的说明书吧,那么这么说的话,感觉之前做WEB开发时候连说明书都没看就直接上了,这显然是不行滴,不过感觉理论这种东西很容易忘,尤其是我这种非计算机专业的孩子理论知识上比起血统纯正的计算机专业的学生还是有差距的,自学的孩子伤不起啊,实习回来,一面试发现原来的基础知识都忘得差不多了,坑爹啊 

          废话就说到这里,开始这次的笔记吧,这章主要说的是URL与资源的问题,根据我的理解呢,其实URL就是为了给互联网上众多的资源定位,以方便人们可以快速准确的找到资源,当然,与现实生活中一样,这个所谓网络上的地址也是有它自己独特的规则的。

          这里先简单的说下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的基本格式:

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

         下面介绍下每个部分:

         方案(使用什么协议):

         方案是规定如何访问指定资源的主要标识符,他负责告诉解析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相对路径和绝对路径:

        这个部分建议参考这篇博文http://blog.csdn.net/jzdzhiyun/article/details/5282512 这里对于相对路径和绝对路径有比较详细的介绍,当然这个博文说的是文件系统的,而URL的相对路径与绝对路径类似,但有几点需要强调下:

    • 相对路径需要用基础URL进行补完,有些时候有些资源会显示的指定基础URL,如在HTML页面中指定<BASE>,通过它来转换这个页面的相对路径。
    • 如果没有显示的制定基础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,就是将目标资源所谓的编码交给使中间服务器进行查找,将查找到的资源的整合返回,感觉有点类似于搜索吧。。

        这次的笔记就到这里了,下一章是长篇啊,工作量略大,加油。

  • 相关阅读:
    14个顶级开发社区 [程序员]
    跟我一起学习VIM
    INTRODUCTION TO BIOINFORMATICS
    vim + ctags + taglist配置和使用
    使用Gitblit 在windows 上部署你的Git Server
    HMM基本原理及其实现(隐马尔科夫模型)
    Qt 所有版本官方下载地址
    如何在ubuntu中安装和配置TeX Live ,Texstudio
    PyCharm和Anaconda的区别与联系
    如何在 matlab 和 excel之间进行数据导入导出操作?
  • 原文地址:https://www.cnblogs.com/littlewish/p/2843551.html
Copyright © 2020-2023  润新知