功能说明
HTTP 方法的安全、幂等和可缓存属性决定了重试与缓存策略。该函数把方法名标准化并返回三个标记,同时提供基于方法和状态码的重试判断,避免对非幂等请求盲目重试。它适合封装 HTTP 客户端、重试中间件和缓存层的公共判断逻辑。
关键代码
用 Set 定义 SAFE、IDEMPOTENT 与 CACHEABLE 集合,其中 CACHEABLE 只包含默认允许缓存的 GET 与 HEAD。methodSemantics 校验已知方法后返回标记。isRetryable 对 5xx 且幂等的方法返回 true,并允许 503 作为服务暂时不可用的特例。
return {
method: normalized,
safe: SAFE.has(normalized),
idempotent: IDEMPOTENT.has(normalized),
cacheableByDefault: CACHEABLE.has(normalized),
};
使用注意
PATCH 通常不是幂等的,除非请求体定义保证。DELETE 幂等但重复调用可能返回 404。POST 可在显式新鲜度信息下缓存,但不属于默认可缓存。可缓存性还取决于响应头与状态码,不能只看方法。重试前应结合 Retry-After 与退避策略。
验证方式
断言 GET 安全、幂等且默认可缓存,PUT 幂等但不安全,POST 不安全且不幂等。isRetryable(“GET”, 500) 为 true,isRetryable(“POST”, 500) 为 false,isRetryable(“POST”, 503) 为 true。未知方法抛 RangeError,非法状态码抛 RangeError。