网淘吧来吧,欢迎您!

HTTP技能使用说明

2026-03-29 新闻来源:网淘吧 围观:20
电脑广告
手机广告

重定向(常混淆概念)

  • 307与308:两者均保留请求方法;307为临时重定向,308为永久重定向——适用于POST/PUT请求的重定向场景
  • 301/302可能将POST转为GET(浏览器行为)——带请求体的API重定向切勿使用
  • 必须包含Location响应头且需使用绝对URL——旧版本客户端可能无法解析相对路径
  • 重定向循环:限制在5-10次跳转内;无限循环将导致客户端崩溃

缓存策略组合

  • Cache-Control: no-store适用于敏感数据——绝不写入磁盘
  • no-cache仍会缓存但每次都需要重新验证——并非"不缓存"
  • private, max-age=0, must-revalidate适用于用户专属、需实时更新的内容
  • public, max-age=31536000, immutable适用于带版本号的静态资源
  • Vary: Accept-Encoding, Authorization当响应内容依赖这些请求头时——遗漏Vary声明将导致缓存异常

条件请求

  • ETag+If-None-Match:推荐用于API——基于内容哈希
  • 强ETag与弱ETag:"abc"对比W/"abc"——弱ETag允许语义上等价的响应
  • If-Match用于乐观锁:如果资源自读取后已更改,则更新失败
  • If-Match失败时返回412 Precondition Failed——而非409 Conflict

CORS预检请求触发条件

  • 自定义头部(任何非Accept、Accept-Language、Content-Language、Content-Type简单值的头部)
  • Content-Type非以下类型:application/x-www-form-urlencoded、multipart/form-data、text/plain
  • PUT、DELETE、PATCH方法——即使目标同源,若满足其他条件也会触发
  • ReadableStream请求体——会触发预检
  • 预检结果缓存时长由Access-Control-Max-Age控制—设置为86400以减少OPTIONS请求泛滥

安全响应头(必须设置)

  • Strict-Transport-Security: max-age=31536000; includeSubDomains—HSTS一经设置便不易撤销
  • X-Content-Type-Options: nosniff—防止MIME嗅探攻击
  • X-Frame-Options: DENYSAMEORIGIN—防止点击劫持
  • 内容安全策略—配置复杂但至关重要;建议先启用仅报告模式

范围请求

  • Accept-Ranges: bytes表示支持范围请求——客户端可请求部分内容
  • Range: bytes=0-1023请求前1024字节;bytes=-500请求最后500字节
  • 返回206部分内容状态码并携带Content-Range: bytes 0-1023/5000
  • 如果范围无效,返回416 Range Not Satisfiable——包含Content-Range: bytes */5000

错误响应最佳实践

  • 结构化的JSON错误:{"error": {"code": "VALIDATION_FAILED", "message": "...", "details": [...]}}
  • 在错误响应中包含请求ID——便于日志关联
  • 生产环境中不要泄露堆栈跟踪——在服务器端记录,返回通用消息
  • 业务规则违规(重复邮箱、资金不足)时使用409 Conflict——不仅仅是400

重试模式

  • 默认只重试幂等方法——GET、PUT、DELETE、HEAD
  • POST重试需要幂等键——Idempotency-Key: <客户端生成的uuid>
  • 指数退避:1秒、2秒、4秒、8秒……加入抖动——防止惊群效应
  • 遵循Retry-After响应头——可以是秒数或HTTP日期
  • 设置合理的超时时间(通常为30秒)——不要无限等待

常被遗忘的请求头

  • Vary必须包含影响响应的头部——不设置CORSVary: Origin会破坏
  • Content-Disposition: attachment; filename="report.pdf"用于下载
  • X-Request-ID:若不存在则生成,并向下游服务传递
  • Accept-Language用于本地化响应——需遵循并设置优雅降级机制

连接行为

  • HTTP/1.1协议下若未设置Content-Length或分块传输,则响应后关闭连接
  • Transfer-Encoding: chunked用于流式传输——此时不可设置Content-Length
  • HTTP/2为二进制多路复用协议——HTTP层面无队头阻塞
  • WebSocket升级:需使用GET请求并设置Connection: UpgradeUpgrade: websocket
免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第326264名访客 今日有221篇新文章/评论