ETags are also a built-in way to avoid conflicts when multiple clients are mutating the same data. Instead of each client sending<p><pre><code> PUT /doc
</code></pre>
And blindly overwriting what’s there, they send<p><pre><code> PUT /doc
If-Match: <etag they fetched>
</code></pre>
If the current server-side ETag had a different value, it can return a 409. Then the client can re-fetch the document, re-apply the changes, and re-PUT it in a loop until it succeeds.<p>You wouldn’t do that for huge, frequently changing docs like a collaborative spreadsheet or such. It’s perfect for small documents where you’d expect success most of the time but failure is frequent enough that you want some sort of smart error handling.