Brandon Williams <bmwill@xxxxxxxxxx> writes: > + Capabilities > +~~~~~~~~~~~~~~ > + > +There are two different types of capabilities: normal capabilities, > +which can be used to to convey information or alter the behavior of a > +request, and commands, which are the core actions that a client wants to > +perform (fetch, push, etc). > + > +All commands must only last a single round and be stateless from the > +perspective of the server side. All state MUST be retained and managed > +by the client process. This permits simple round-robin load-balancing > +on the server side, without needing to worry about state management. > + > +Clients MUST NOT require state management on the server side in order to > +function correctly. This somehow feels a bit too HTTP centric worldview that potentially may penalize those who do not mind stateful services. > + agent > +------- > + > +The server can advertise the `agent` capability with a value `X` (in the > +form `agent=X`) to notify the client that the server is running version > +`X`. The client may optionally send its own agent string by including > +the `agent` capability with a value `Y` (in the form `agent=Y`) in its > +request to the server (but it MUST NOT do so if the server did not > +advertise the agent capability). Are there different degrees of permissiveness between "The server CAN" and "The client MAY" above, or is the above paragraph merely being fuzzy? I notice that, with the above "MUST NOT", it is impossible for a server to collect voluntary census information from client without revealing its own "version". Because in principle it is not sensible to allow one side to send random capabilities without first making sure that the other side understands them, unsolicited "agent" from the client over a channel where the server did not say it would accept one is quite fine, and the server can always say something silly like "agent=undisclosed" to allow the clients to volunteer their own version, but the definition of this capability smells like conflating two unrelated things (i.e. advertising your own version vs permission to announce yourself).