CalDAV PUT renames resources (201 + Location, hidden alias) – breaks DAVx5 and other href-based clients

Hi Support and Developers,

while syncing my appointments with Axigen, I noticed some very strange behavior that resulted in duplicate appointments. Here is the analysis.

Setting: Axigen 10.7.1, CalDAV via WebMail listener.

Observed: A PUT to /Calendar/Calendar/umbenennung-1791720489.ics (If-None-Match: *) returns 201 Created with Location: /Calendar/Calendar/Calendar_76_290_388.ics. PROPFIND (Depth 1) lists the event only as Calendar_76_290_388.ics. The requested name keeps working as a hidden alias: GET returns 200, and DELETE on the alias removes Calendar_76_290_388.ics.

Why this is a problem: Per RFC 9110 (PUT), the request creates or replaces the target resource, i.e. the request URI. CalDAV sync clients rely on stable hrefs (ETag, sync-token, href). With DAVx5 every event created on the device appears twice. The client keeps <name>.ics, and the next sync reports Calendar_…ics as a new event. The DAVx5 developers analysed our logs and confirmed: “Axigen seems to be the only server with this behaviour … it is not standards-compliant.”

Note: CardDAV is not affected. vCards are stored under the client-supplied name.

Request: Please store CalDAV resources under the request URI, or provide an option to do so.

Pease fix this bug as soon as possible. :slight_smile:

Cheers :slight_smile: