公开 API
HTTP 缓存与 304
公开读取用 If-None-Match。未变返回 304。轮询间隔 ≥ 5 分钟。
公开 RSS 与 JSON 支持条件请求。写入、删除、/me、个人订阅不缓存。
公开 JSON 成功响应让浏览器使用 max-age=0,由浏览器重新验证;边缘使用
端点定义的 s-maxage 与 stale 窗口。/api/anime/groups 的成功响应保留
原有 JSON、ETag、HEAD 和条件 304。公共读模型暂时不可用时返回
503 SEARCH_UNAVAILABLE、Retry-After 与 no-store,不会把失败写入共享缓存。
RSS 按 URL 身份分为两类。无 limit、搜索或过滤条件的 fixed RSS 每次核对当前
发布版本;正文未变化时仍可返回 304,并使用 no-store 避免共享缓存保存
旧正文。带 limit、过滤或搜索条件的 RSS 使用有界刷新策略。RSS 的 <ttl>
只是客户端轮询提示,不是服务器推送。
带上次的 ETag。未变化返回 304,无正文。优先 If-None-Match,不要依赖 If-Modified-Since。
轮询间隔 ≥ 5 分钟。更短没有收益,且容易 429。
H=$(curl -sI "https://anibt.net/rss/anime.xml?bgmId=543360")
ETAG=$(echo "$H" | grep -i '^etag:' | cut -d' ' -f2- | tr -d '\r')
curl -sI -H "If-None-Match: $ETAG" \
"https://anibt.net/rss/anime.xml?bgmId=543360"发布接口的 200 不表示 RSS 立刻包含该条。用返回的 releaseId 在详情页或 RSS 正文核对。