zoukankan      html  css  js  c++  java
  • URL与资源

    这是看 Http权威指南 的笔记

    URL与资源

    浏览因特网资源

    URL(Uniform Resource Locator)统一资源定位符 是因特网上定位资源的主要方法,它的格式一般为

    方案://服务器位置/路径, 以下是URL的一个例子

    http://www.baidu.com/index.html
    URL方案(scheme) 服务器位置 资源路径

    URL的语法

    下面我们来详细介绍一下URL的语法

    大多数的URL方案的避URL语法都建立在由9部分构成的通用格式化上

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

    以下各种组件进行总结

    组件描述默认值
    方案(scheme) 访问服务器以获取资源时要使用的协议
    用户(user) 一些方案访问资源时需要的用户名 匿名
    密码(password) 用户名后面可能要包含密码,中间由冒号分隔 <E-mail地址>
    主机(host) 资源宿主服务器的主机名或点分IP地址
    端口(port) 资源宿主服务器正在监听的端口号,很多方案都有默认端口号(HTTP默认端口号为80) 每个方案特有
    路径 服务器上资源的本地名,由一个"/"将其与前面的URL组件分隔开来.路径组件的语法与服务器和方案有关
    参数 一些方案会用这个组件指定输入参数. 参数为名/值对. URL中可以包含多个参数字段,
    它们相互以及与路径的其余部分之间用分号(;)分隔
    查询 一些方案会用这个组件传递参数以激活应用程序.查询组件的内容没有通用格式.化用符号"?"将其与URL的其余部分分隔开来
    片段 一小片或一部分资源的名字.引用对象时,不会将frag字段传送给服务器这个字段是在客户端内部使用的.通过字符"#"将其与URL其余部分分隔开来

    接下来讲分别讲主要的组件

    方案

    方案实际上规定了如何访问指定资源的主要标识符,它会告诉程序如何解析URL

    方案组件必需以一个字母符号开始,由第一个":"将其和URL的其它部分分隔, 方案是大小写无关的

    主机和端口

    主机和端口用以识别互联网上的主机,可以通过主机名,也可以通过IP地址指向服务器

    用户名和密码

    用户名和密码用":"分隔符

    路径

    路径通常是像一个分级的文件系统路径. 可以用字符"/"将HTTP URL的路径组件划分成一些路径段(path segment),每个路径段都有自己的参数组件

    参数

    URL的快捷方式

    相对URL

    URL有两种方式:绝对的相对的. 上文出现的都是绝对的URL. 绝对URL中包含有访问资源的所需的全部信息

    同时,相对论URL是不完整的,要从相对URL中获取讓访问资源所需的全部信息,就发源相对于另一个,被称为其基础(base)的URL进行解析

    以下是书上的一个例子

    <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
    </p>
    </BODY>
    </HTML>
    

    其中,基础URL为:http://www.joes-hardware.com/tools.html

    资源./hammers.html即相对的URL,它被解析为:基础URL+相对URL(后面有讲具体的解析规则),

    即http://www.joes-hardware.com/hammers.html

    基础URL

    转换处理的第一步就是找到基础URL. 基础URL是相对论URL的参考点. 基础URL可以来自以下几个不同的地方

    • 在资源中显式提供

      有些资源会显式指定基础课URL, 如, html中可以用标记<BASE>, 通过它来转换那个HTML文档中的所有相对URL

    • 封闭资源的基础URL

      如果在一个没有显式指定基础URL的资源中发现一个相对URL, 可以将它所属的资源的URL作为基础

    • 没有基础URL

      如果没有基础的URL, 这通常意味着你有一个绝对的URL,但有时可能只是一个不完整或损坏的URL

    解析相对引用

    要将一个相对URL转换为绝对URL,要将其先划分为一个个组件. 把URL划分为组件后,就可以用以下的算法完成转换了(图处来自书本)

     将相对URL转换为绝对URL算法流程

    我们对上面的./hammers.html使用图中描述的算法

    1. 路径为./hammers.html, 基础URL为http://www.joes-hardware.com/tools.html
    2. 方案(scheme)为空,沿着图左边处理,继承基础URL方案
    3. 至少一个组件非空,一直处理到底端,继承主机和端口组件
    4. 将来自相对URL(路径:./harmers.html)的组件与继承的组件合并,得到新的绝对URL:http://ww.joes-hardware.com/hammers.html

    令人头疼的字符

    URL字符集

    http的字符集为US-ASCII,其它字符用转义序列表示

    编码机制

    为了避开安全字符集表示法带来的限制,人们设计了这样一种编码机制来转义一些不安全的字符

    具体做法是:一个百分号(%)+两个表示字符ASCII码的十六进制

    以下列出几个例子

    字符ASCII码示例URL
    ~ 126(0x7E) http://www.joes-hardware.com/%7Ejoe
    空格 32(0x20) http://www.joes-hardware.com/more%20tools.html
    % 37(0x25) http://www.joes-hardware.com/100%25satisfaction.html

    字符限制

    在URL中有几个字符被保留, 在URL中也对其进行编码, 以下是保留及受限字符

    字符 保留/受限
    % 保留作为编码字符的转义标志
    / 保留作为路径组件中的分隔字符
    . 保留在路径组件中使用
    .. 保留在路径组件中使用
    # 保留作为分段定界使用
    ? 保留作为查询字符串定界使用
    ; 保留作为参数定界符使用
    : 保留作为方案, 用户/号令, 以及主机/端口组件的定界符使用
    $,+ 保留
    @ & = 在一些方案上下文特殊的含义,保留
    {} | ^ ~ [] ' 由于各种传输Agent代理,各种网关的不安全处理,使用受限
    < > " 不安全
    0x00-0x1f,0x7f 受限,这些十六进制范围内的字符都在ASCII字符集的不可打印区间内
    >0x7f 受限,十六进制值在此范围内的字符都不在ASCII字符集的7比特范围内

    转载请注明出处,请忽用于任何商业用途--nothi

  • 相关阅读:
    jsf web.xml配置
    JSF中Filter的实现
    转码
    facelates标签
    jsf学习笔记注解
    date工具类
    js秒读功能
    w3c document 与 dom4j document转化工具类
    jsf学习笔记ui
    jsf学习笔记拦截器
  • 原文地址:https://www.cnblogs.com/pangblog/p/3306391.html
Copyright © 2011-2022 走看看