2. Observe Option
Observe Option 具有以下属性. 其含义取决于它包含在 GET request 中还是 response 中.
| No. | C | U | N | R | Name | Format | Length | Default |
|---|---|---|---|---|---|---|---|---|
| 6 | x | - | Observe | uint | 0-3 B | (none) |
- C=Critical, U=Unsafe, N=No-Cache-Key, R=Repeatable
Table 1: Observe Option
当包含在 GET request 中时, Observe Option 扩展 GET method, 使其不仅检索 target resource 的 current representation, 还根据 option value 请求 server 在该 resource 的 observers 列表中添加或移除一个 entry. 该 list entry 由 client endpoint 和 client 在 request 中指定的 token 组成. 可能的 values 为:
-
0 (register) 如果 entry 不存在, 则将其添加到 list;
-
1 (deregister) 如果 entry 存在, 则将其从 list 中移除.
Observe Option 对处理 request 并非 critical. 如果 server 不愿或无法向 observers list 添加新 entry, 则 request 回退为普通 GET request, 且 response 不包含 Observe Option.
Observe Option 不是 Cache-Key 的一部分: 带有 request 中 Observe Option 而获得的 cacheable response 可以用于满足不带 Observe Option 的 request, 反之亦然. 当带有 Observe Option 的 stored response 用于满足普通 GET request 时, 在返回 response 前 MUST 移除该 option.
当包含在 response 中时, Observe Option 将 message 标识为 notification. 这意味着 observers list 中存在 matching entry, 且 server 将向 client 通知 resource state 的变化. option value 是用于 reordering detection 的 sequence number (见 Sections 3.4 和 4.4).
Observe Option 的值使用可变数量 bytes 以 network byte order 编码为 unsigned integer ('uint' option format); 见 RFC 7252 [RFC7252] Section 3.2.