Summary
- RFC 7641 gives a CoAP client a best-effort stream of current resource representations. It explicitly does not guarantee that the client will see every intermediate state.
- Freshness depends on Max-Age, a 24-bit Observe comparison and a 128-second time condition. Those rules determine what may be treated as current; they do not create a durable event history.
- An accountable application records the last accepted representation, its freshness evidence, refresh and cancellation outcomes, and any known gaps. If every transition matters, it needs a queue, log or application acknowledgement in addition to Observe.
A relationship, not a backlog
Observe begins with an extended GET. The client sets Observe to zero and supplies a token. If the server returns a successful response with an Observe option, it has added an entry keyed by the client endpoint and token. Further notifications are additional responses to that one request. If the server cannot or will not retain the entry, it may answer as an ordinary GET without Observe. The absence is an operational fact: the client must poll if it still wants current state.
That economy is the point. A temperature display need not poll an unchanged sensor every few seconds. A battery device and a narrow link avoid sending identical representations. Caches and proxies can participate. RFC 7641 preserves a REST resource model rather than attempting to reproduce a general publish-and-subscribe network.
The economy has a precise boundary. The RFC calls the service best effort and aims for eventual consistency. A client cannot rely on seeing every state a resource passes through. If the resource changes faster than the network can carry notifications, or congestion intervenes, the server may skip any number of intermediate states. The result is a current-state channel. It is not a queue in which every transition waits for consumption, and not a log in which the client can seek backwards by offset.
That distinction matters only when the application does. Missing three intermediate temperature readings may be harmless if the task is to display the current room temperature. Missing a brief overpressure state may be decisive if the notification stream is being treated as a safety record. The protocol cannot infer which world it serves. The application owner must say.
What the 24 bits settle
Every successful notification carries the token that identifies the observation. Its Observe value is drawn from the low 24 bits of a strictly increasing server sequence. The client compares the incoming value with the freshest value it has accepted using serial-number arithmetic, not ordinary integer order. That is what lets a small option wrap without making zero permanently older than the largest value.
RFC 7641 adds a time condition. If more than 128 seconds have elapsed since the previously freshest notification arrived, an incoming notification may be treated as newer without relying on the sequence comparison. The rule bounds ambiguity after long silence. It is not a receipt for the time at which the underlying physical event happened. It is based on client-local arrival time and protocol ordering.
The server also must not drive the sequence so quickly that more than half the 24-bit space is consumed in less than 256 seconds. These constraints make comparison workable in a constrained representation. They do not reveal how many states were compressed into two notifications, whether a proxy aggregated downstream clients, or whether the server rebooted and reconstructed its state correctly.
Fresh does not mean complete
Max-Age answers a different question. A notification may be used as current while its age is no greater than the value the server supplied and no newer representation has arrived. Once that limit is exceeded, the client must not assume the enclosed representation still reflects the resource. It can refresh or re-register, normally with the same token and request options.
Expiry therefore changes the permission to rely on a representation. It does not prove the resource changed. It does not prove a packet was lost. It does not license the application to invent an unseen transition. A dashboard that changes “unknown” into “normal” after expiry is making a business decision, not implementing a requirement from the RFC.
The reverse mistake is also common: treating a confirmable message as evidence that the history is complete. CoAP acknowledgement says that a confirmable message arrived. Observe notifications may be confirmable or non-confirmable, independently of the original request. Acknowledging one notification does not attest that all earlier resource states were delivered, retained or acted upon.
Ending the observation is distributed work
A client may simply forget an observation. A later confirmable notification with an unrecognized token should be rejected with Reset, prompting the server to remove the observer. Or the client may explicitly deregister by sending the same token with Observe set to one. Packet loss can delay either route. The server may retain state after the client believes the relationship has ended; the client may have discarded the only local evidence that explains the later traffic.
The protocol provides eventual garbage collection through confirmable notifications and timeouts. It does not make cancellation a single, globally observed transaction. If resource retention, radio cost or privacy depends on prompt cancellation, the application needs an observable completion rule and a retry policy.
A proxy creates another present tense
An intermediary can aggregate several downstream observers into one upstream registration and fan the notifications back out. That saves state and traffic at the origin. It also means each hop has its own Observe values, message-type choices and Max-Age based on its local representation. The client sees the proxy's account of currentness, not the origin's raw sequence.
This is valid operation, not deception. It becomes an accountability problem when a product presents the path as one transparent stream while hiding which hop refreshed, skipped, restarted or cancelled. A conformance claim should therefore be tested through the proxy, not merely against a direct server in a quiet lab.
Member Briefing
Deeper Profile Context
Sign in with the right membership level to unlock the full briefing and source notes.
Only for Strategic Circle
Strategic Circle
Open to all readers. Unlock profile briefings after joining and signing in.
Join Strategic CircleOnly for Leadership Alliance
Leadership Alliance
For qualified IP-asset owners and management; sign in to unlock alliance briefings.
Join Leadership Alliance
