当前位置: 首页 > news >正文

istio如何自定义重试状态码

HTTP 4xx 状态码表示客户端错误,意味着请求有问题(例如,格式错误、未授权、资源不存在等)。以下是常见的 4xx 状态码列表,整理为 Markdown 格式:

4xx 状态码列表

  • 400 Bad Request:请求格式错误或无效(例如,参数缺失、格式不正确)。
  • 401 Unauthorized:客户端未提供有效认证凭证(需登录或提供 token)。
  • 402 Payment Required:保留状态码,当前少用,可能用于要求支付。
  • 403 Forbidden:客户端无权限访问资源(认证通过但无访问权限)。
  • 404 Not Found:请求的资源在服务器上不存在。
  • 405 Method Not Allowed:请求的 HTTP 方法(如 GET、POST)不被资源支持。
  • 406 Not Acceptable:服务器无法提供客户端请求的格式(基于 Accept 头)。
  • 407 Proxy Authentication Required:需要代理服务器认证。
  • 408 Request Timeout:客户端请求超时,服务器未在规定时间内收到完整请求。
  • 409 Conflict:请求与服务器资源状态冲突(如并发修改、版本不匹配)。
  • 410 Gone:资源已永久删除,且无转发地址。
  • 411 Length Required:请求缺少 Content-Length 头。
  • 412 Precondition Failed:请求的先决条件(基于 If-Match 等头)未满足。
  • 413 Payload Too Large:请求体过大,服务器拒绝处理。
  • 414 URI Too Long:请求的 URI 过长,服务器无法处理。
  • 415 Unsupported Media Type:请求的媒体类型(如 Content-Type)不被支持。
  • 416 Range Not Satisfiable:请求的范围(Range 头)无效或无法满足。
  • 417 Expectation Failed:服务器无法满足 Expect 请求头的要求。
  • 418 I’m a teapot:愚人节玩笑状态码(RFC 2324),实际不常用。
  • 422 Unprocessable Entity:请求格式正确但语义错误(常用于 WebDAV 或 API)。
  • 423 Locked:资源被锁定(常用于 WebDAV)。
  • 424 Failed Dependency:请求依赖的其他操作失败(WebDAV)。
  • 426 Upgrade Required:客户端需升级协议(如切换到 TLS/1.0)。
  • 428 Precondition Required:请求缺少必要的先决条件(如 If-Match)。
  • 429 Too Many Requests:客户端请求频率超限(限流场景)。
  • 431 Request Header Fields Too Large:请求头字段过大,服务器拒绝处理。
  • 451 Unavailable For Legal Reasons:因法律原因(如审查)无法访问资源。

在 Istio 中的 4xx 重试

结合你之前的问题,以下是关于 4xx 状态码在 Istio 重试上下文中的说明:

  • 默认不可重试:Istio 默认不将任何 4xx 状态码视为可重试,因为它们通常表示客户端错误,重试可能无效。
  • 潜在可重试的 4xx 状态码
    • 429 Too Many Requests:限流场景,结合 Retry-After 头延迟重试可能有效。
    • 401 Unauthorized:如果客户端能动态刷新凭证(如 token),可考虑重试。
    • 408 Request Timeout:可能由临时网络问题引起,适合重试。
    • 409 Conflict:在特定场景(如临时分布式锁冲突)可重试,但需谨慎。
  • 配置方法:通过 EnvoyFilter 设置 retriable_status_codes
    apiVersion: networking.istio.io/v1alpha3
    kind: EnvoyFilter
    metadata:name: retriable-4xxnamespace: istio-system
    spec:configPatches:- applyTo: HTTP_ROUTEmatch:context: SIDECAR_OUTBOUNDpatch:operation: MERGEvalue:route:retry_policy:retry_on: "retriable-status-codes"retriable_status_codes:- 401- 408- 409- 429num_retries: 3per_try_timeout: 2s
    

注意事项

  • 4xx 重试谨慎:大部分 4xx 状态码(如 400、403、404)重试无意义,可能增加无效请求。
  • 409 特殊性:如前所述,409 表示冲突,通常需客户端处理(如更新版本号)后重试,而非盲目重试。
  • 429 限流:重试 429 需结合延迟策略(如 Retry-After 头),否则可能加剧限流。
  • Istio 限制:当前版本(截至 1.10.2)不支持通过 VirtualService 直接设置 retriable-4xx 或基于响应头的重试,需用 EnvoyFilter

总结

  • 4xx 状态码:涵盖 400-451,常见如 400、401、403、404、409、429 等。
  • Istio 重试:默认不重试 4xx,可通过 EnvoyFilter 配置 401、408、409、429 等为可重试。
  • 推荐:仅在明确业务场景(如 429 限流、401 凭证刷新)下配置 4xx 重试,并确保与应用程序逻辑协调。
http://www.lryc.cn/news/590926.html

相关文章:

  • NLP——迁移学习
  • pytorch学习笔记(五)-- 计算机视觉的迁移学习
  • 浅探C语言的回调函数(Callback Function)
  • 要实现在调用  driver.get()  后立即阻止页面自动跳转到 Azure 登录页,可通过以下几种方法实现:
  • AWS Lambda 最佳实践:构建高效无服务器应用的完整指南
  • Kubernetes ConfigMap 深度指南
  • 大模型Agent应用开发实战:从框架选型到行业落地
  • ros2 标定相机
  • 三轴云台之测距算法篇
  • 《C++初阶之STL》【auto关键字 + 范围for循环 + 迭代器】
  • 【Dv3Admin】菜单管理集成阿里巴巴自定义矢量图标库
  • 大型语言模型(LLM)在网络安全中最具商业价值的应用场景(Grok3 回答 DeepSearch模式)
  • Python包测试全攻略:从单元测试到持续集成
  • sqli-labs靶场通关笔记:第24关 二次注入
  • LiteSQL:让C++与数据库无缝对接的ORM利器
  • 河南萌新联赛2025第一场-河南工业大学
  • Redis面试相关问题总结
  • string + 栈 bitset 可达性统计(拓扑排序)
  • Redis深度解析:从缓存原理到高并发实战
  • Go语言高并发聊天室(三):性能优化与压力测试
  • 防火墙准入与拦截技术文档
  • Qt初阶开发:QMediaPlayer的介绍和使用
  • 杭州卓健信息科技有限公司 Java 面经
  • iOS App 电池消耗管理与优化 提升用户体验的完整指南
  • 暑期算法训练.3
  • 基于 Electron + Vue 3 的桌面小说写作软件架构设计
  • Python应用指南:使用PyKrige包实现ArcGIS的克里金插值法
  • Kubernetes (k8s)环境重启Pod方式总结
  • Perspective:一款开源的交互式分析和数据可视化组件
  • 独家|理想汽车放弃华为PBC模式,回归OKR理想汽车