Skip to main content

HTTP Headers

If-Match: <etag_value>
If-Match: <etag_value>, <etag_value>, …

If-None-Match: "<etag_value>"
If-None-Match: "<etag_value>", "<etag_value>", …
If-None-Match: *

If-Modified-Since: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT

If-Range: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT
If-Range: <etag>

If-Unmodified-Since: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT

Last-Modified: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT

ETag: W/"<etag_value>"
ETag: "<etag_value>"
  • Cache-Control, Content-Location, Date, ETag, Expires, Vary
  • https://www.rfc-editor.org/rfc/rfc9110#field.etag
  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
  • end-to-end header
    • 应该从客户端一路传到最终后端
    • User-Agent, Accept
  • hop-by-hop header
    • 只对当前这一跳连接有效,代理不应该继续转发
    • Connection, Keep-Alive, Proxy-Authenticate, Proxy-Authorization, TE, Trailer, Transfer-Encoding, Upgrade
    • Connection 可以指定额外的 hop-by-hop header
      • Connection: X-Foo
      • 代理转发到后端前应该删除它

Idempotency-Key

  • https://www.ietf.org/archive/id/draft-ietf-httpapi-idempotency-key-header-07.html
  • 相同 Key 的原请求仍在执行 409 Conflict
  • 相同 Key 但请求内容不同 422 Unprocessable Content
  • adopted by
    • Stripe
    • Adyen
    • OpenAI
    • Integrated Finance
      • X-Idempotency-Status: processed|replayed
    • Worldpay
      • Idempotency-Status
  • Alternative
    • PayPal - PayPal-Request-Id
    • AWS - ClientToken, ClientRequestToken
  • Cache TTL
    • 普通内部 API、短暂网络重试 1-6h
    • 常规公共 API 24h
    • 支付、下单、不可逆操作 24-72h
    • Idempotency-Key → resource_id / operation_id