Ah, I see the problem. This is a bad interaction between caching and HTTP content negotiation. The WordPress ActivityPub plugin uses the post URL as its AP
Article
object id, which means it switches between serving JSON AS2 to ActivityPub requests and HTML to browsers based on the request's Accept
header, but it's not including Accept
in the Vary
header to indicate that. @pfefferle@mastodon.social adding Accept
to Vary
should fix this!
(…on a related note, content negotiation considered harmful 😠)