跳到主要内容

6. 序列化来源

6. 序列化来源

本节定义如何将来源 (origin) 序列化为 Unicode [Unicode6] 字符串以及 ASCII [RFC20] 字符串.

6.1 来源的 Unicode 序列化

来源的 unicode-serialization 是以下算法返回的值:

  1. 如果来源不是 scheme/host/port 三元组, 则返回字符串

    null

    (即码点序列 U+006E, U+0075, U+006C, U+006C), 并中止这些步骤.

  2. 否则, 令 result 为来源三元组的 scheme 部分.

  3. 将字符串 "://" 追加到 result.

  4. 将来源三元组的 host 部分的每个组件 (按如下方式转换) 追加到 result, 组件之间用 U+002E FULL STOP 码点 (".") 分隔:

    1. 如果组件是 A-label, 则改用相应的 U-label (参见 [RFC5890] 和 [RFC5891]).

    2. 否则, 原样使用该组件.

  5. 如果来源三元组的 port 部分不同于来源三元组的 scheme 部分所给协议的默认端口:

    1. 将一个 U+003A COLON 码点 (":") 和给定端口的十进制表示追加到 result.
  6. 返回 result.

6.2 来源的 ASCII 序列化

来源的 ascii-serialization 是以下算法返回的值:

  1. 如果来源不是 scheme/host/port 三元组, 则返回字符串

    null

    (即码点序列 U+006E, U+0075, U+006C, U+006C), 并中止这些步骤.

  2. 否则, 令 result 为来源三元组的 scheme 部分.

  3. 将字符串 "://" 追加到 result.

  4. 将来源三元组的 host 部分追加到 result.

  5. 如果来源三元组的 port 部分不同于来源三元组的 scheme 部分所给协议的默认端口:

    1. 将一个 U+003A COLON 码点 (":") 和给定端口的十进制表示追加到 result.
  6. 返回 result.