221 lines
8.0 KiB
YAML
221 lines
8.0 KiB
YAML
# Registry: HTTP Headers
|
|
# SSOT: wiki/projects/ca-tmpl/registries/headers.yaml
|
|
# Schema owner: feature-contract-registry-governance
|
|
# Last updated: 2026-05-22
|
|
#
|
|
# Conventions:
|
|
# - HTTP header name: kebab-case (X-Request-Id, X-Tenant-Id)
|
|
# - W3C standard headers: lowercase (traceparent, tracestate)
|
|
# - mdc_key: snake_case (foundation SSOT)
|
|
# - envelope_meta_field: camelCase (envelope SSOT)
|
|
|
|
headers:
|
|
# source: feature-operational-error-observability-foundation.md L97
|
|
# "request_id | inbound filter (생성 또는 X-Request-Id 헤더) | response header X-Request-Id"
|
|
- name: X-Request-Id
|
|
direction: both
|
|
type: ulid
|
|
required: false
|
|
generated_if_missing: true
|
|
mdc_key: request_id
|
|
envelope_meta_field: requestId
|
|
owner_branch: feature-operational-error-observability-foundation
|
|
case_style: kebab
|
|
compatibility_impact: none
|
|
required_test: contract-verification:envelope-headers
|
|
|
|
# source: feature-api-contract-baseline.md L67
|
|
# "X-Api-Version은 실험/compatibility 보조 header이며 path version과 충돌하면 path가 우선"
|
|
- name: X-Api-Version
|
|
direction: inbound
|
|
type: string
|
|
required: false
|
|
generated_if_missing: false
|
|
mdc_key: null
|
|
envelope_meta_field: null
|
|
owner_branch: feature-api-contract-baseline
|
|
case_style: kebab
|
|
compatibility_impact: additive
|
|
required_test: contract-verification:api-versioning
|
|
|
|
# source: feature-api-contract-baseline.md L77 / feature-rate-limit-idempotency-contract.md L66-67
|
|
# "idempotency header 이름은 Idempotency-Key" / "기본 scope는 (authenticatedPrincipal, idempotencyKey, useCaseName)"
|
|
- name: Idempotency-Key
|
|
direction: inbound
|
|
type: string
|
|
required: false
|
|
generated_if_missing: false
|
|
mdc_key: null
|
|
envelope_meta_field: null
|
|
owner_branch: feature-rate-limit-idempotency-contract
|
|
case_style: kebab
|
|
compatibility_impact: additive
|
|
required_test: contract-verification:idempotency-replay
|
|
|
|
# source: feature-rate-limit-idempotency-contract.md L85 / foundation L85
|
|
# "RATE_LIMIT | ... | 429 | true (Retry-After 이후)" / "retry-after 기준 없이 429를 반환하면 실패"
|
|
- name: Retry-After
|
|
direction: outbound
|
|
type: duration-seconds
|
|
required: false
|
|
generated_if_missing: false
|
|
mdc_key: null
|
|
envelope_meta_field: null
|
|
owner_branch: feature-rate-limit-idempotency-contract
|
|
case_style: kebab
|
|
compatibility_impact: additive
|
|
required_test: contract-verification:rate-limit-headers
|
|
|
|
# source: feature-rate-limit-idempotency-contract.md scope L26 (rate limit response/log 기준)
|
|
# rate-limit 응답 표면 (limit/remaining/reset 3종은 표준 rate-limit signaling)
|
|
- name: X-RateLimit-Limit
|
|
direction: outbound
|
|
type: numeric
|
|
required: false
|
|
generated_if_missing: true
|
|
mdc_key: null
|
|
envelope_meta_field: null
|
|
owner_branch: feature-rate-limit-idempotency-contract
|
|
case_style: kebab
|
|
compatibility_impact: additive
|
|
required_test: contract-verification:rate-limit-headers
|
|
|
|
# source: feature-rate-limit-idempotency-contract.md scope L26 (rate limit response/log 기준)
|
|
- name: X-RateLimit-Remaining
|
|
direction: outbound
|
|
type: numeric
|
|
required: false
|
|
generated_if_missing: true
|
|
mdc_key: null
|
|
envelope_meta_field: null
|
|
owner_branch: feature-rate-limit-idempotency-contract
|
|
case_style: kebab
|
|
compatibility_impact: additive
|
|
required_test: contract-verification:rate-limit-headers
|
|
|
|
# source: feature-rate-limit-idempotency-contract.md scope L26 (rate limit response/log 기준)
|
|
- name: X-RateLimit-Reset
|
|
direction: outbound
|
|
type: rfc3339-date
|
|
required: false
|
|
generated_if_missing: true
|
|
mdc_key: null
|
|
envelope_meta_field: null
|
|
owner_branch: feature-rate-limit-idempotency-contract
|
|
case_style: kebab
|
|
compatibility_impact: additive
|
|
required_test: contract-verification:rate-limit-headers
|
|
|
|
# source: feature-api-compatibility-deprecation-contract.md L87
|
|
# "deprecation marker | OpenAPI deprecated: true + branch note | response header optional"
|
|
- name: Deprecation
|
|
direction: outbound
|
|
type: rfc3339-date
|
|
required: false
|
|
generated_if_missing: false
|
|
mdc_key: null
|
|
envelope_meta_field: null
|
|
owner_branch: feature-api-compatibility-deprecation-contract
|
|
case_style: kebab
|
|
compatibility_impact: additive
|
|
required_test: contract-verification:deprecation-marker
|
|
|
|
# source: feature-api-compatibility-deprecation-contract.md L87
|
|
# "deprecation marker | OpenAPI deprecated: true + branch note | response header optional" (RFC 8594 Sunset)
|
|
- name: Sunset
|
|
direction: outbound
|
|
type: rfc3339-date
|
|
required: false
|
|
generated_if_missing: false
|
|
mdc_key: null
|
|
envelope_meta_field: null
|
|
owner_branch: feature-api-compatibility-deprecation-contract
|
|
case_style: kebab
|
|
compatibility_impact: additive
|
|
required_test: contract-verification:deprecation-marker
|
|
|
|
# source: feature-distributed-tracing-contract.md L64, L85
|
|
# "propagation header는 W3C traceparent default" / "HTTP | traceparent, tracestate (W3C)"
|
|
- name: traceparent
|
|
direction: both
|
|
type: string
|
|
required: false
|
|
generated_if_missing: true
|
|
mdc_key: trace_id
|
|
envelope_meta_field: traceId
|
|
owner_branch: feature-distributed-tracing-contract
|
|
case_style: kebab
|
|
compatibility_impact: none
|
|
required_test: contract-verification:trace-propagation
|
|
|
|
# source: feature-distributed-tracing-contract.md L66, L85
|
|
# "propagation format = W3C traceparent + tracestate only. B3 propagation은 forbidden"
|
|
- name: tracestate
|
|
direction: both
|
|
type: comma-separated
|
|
required: false
|
|
generated_if_missing: false
|
|
mdc_key: null
|
|
envelope_meta_field: null
|
|
owner_branch: feature-distributed-tracing-contract
|
|
case_style: kebab
|
|
compatibility_impact: none
|
|
required_test: contract-verification:trace-propagation
|
|
|
|
# source: feature-operational-error-observability-foundation.md L100
|
|
# "correlation_id | inbound header X-Correlation-Id 또는 생성 | HTTP X-Correlation-Id, message header correlation_id"
|
|
- name: X-Correlation-Id
|
|
direction: both
|
|
type: ulid
|
|
required: false
|
|
generated_if_missing: true
|
|
mdc_key: correlation_id
|
|
envelope_meta_field: correlationId
|
|
owner_branch: feature-operational-error-observability-foundation
|
|
case_style: kebab
|
|
compatibility_impact: none
|
|
required_test: contract-verification:envelope-headers
|
|
|
|
# source: feature-tenant-context-policy.md L69, L101 (foundation)
|
|
# "tenant resolution 우선순위 = ... (2) 명시적 X-Tenant-Id 헤더 (admin/internal API only)" /
|
|
# "tenant_id | tenant context (활성 시) | downstream HTTP X-Tenant-Id (with allowlist)"
|
|
- name: X-Tenant-Id
|
|
direction: both
|
|
type: ulid
|
|
required: false
|
|
generated_if_missing: false
|
|
mdc_key: tenant_id
|
|
envelope_meta_field: null
|
|
owner_branch: feature-tenant-context-policy
|
|
case_style: kebab
|
|
compatibility_impact: additive
|
|
required_test: contract-verification:tenant-header-policy
|
|
|
|
# source: feature-security-operational-baseline.md L66
|
|
# "JWT Resource Server를 baseline security model로 둠" (Bearer token via Authorization header)
|
|
- name: Authorization
|
|
direction: inbound
|
|
type: bearer-token
|
|
required: false
|
|
generated_if_missing: false
|
|
mdc_key: null
|
|
envelope_meta_field: null
|
|
owner_branch: feature-security-operational-baseline
|
|
case_style: kebab
|
|
compatibility_impact: none
|
|
required_test: contract-verification:jwt-resource-server
|
|
|
|
# source: feature-security-operational-baseline.md L83-90 (AuthN/AuthZ Decision Matrix)
|
|
# 401 응답 시 WWW-Authenticate (Bearer realm/error) — Spring Security JWT Resource Server 표준 challenge header
|
|
- name: WWW-Authenticate
|
|
direction: outbound
|
|
type: string
|
|
required: false
|
|
generated_if_missing: true
|
|
mdc_key: null
|
|
envelope_meta_field: null
|
|
owner_branch: feature-security-operational-baseline
|
|
case_style: kebab
|
|
compatibility_impact: none
|
|
required_test: contract-verification:jwt-resource-server
|