다음을 통해 공유


REST 쿼리 캐싱의 Cache-Control

REST 엔드포인트의 경우 DAB(Data API Builder)가 요청 헤더와 함께 내부 쿼리 결과 캐시를 Cache-Control 사용하는 방법에 영향을 줄 수 있습니다.

중요합니다

런타임 구성에서 캐싱을 사용하지 않도록 설정하면 이러한 지시문이 무시되고 쿼리가 정상적으로 실행됩니다.

지원되는 Cache-Control 값

가치 행동
no-cache DAB가 L1 및 L2 캐시를 모두 바이패스하고, 데이터베이스에서 새 데이터를 가져오고, 캐시를 새 결과로 업데이트하도록 합니다.
no-store 응답을 캐시하지 않도록 DAB에 지시합니다(L1 또는 L2에 저장되지 않고 캐시에서 페치하려고 시도하지 않음).

행동

  • 지시문 일치는 대/소문자를 구분하지 않습니다.
  • DAB는 max-age 또는 max-stale과 같은 다른 표준 Cache-Control 지시문을 해석하지 않습니다.
  • REST 쿼리 작업에만 적용됩니다. GraphQL 요청 수준 캐시 지시문에는 사용되지 않습니다.
  • Cache-Control 요청 HTTP 헤더 값은 L1 및 L2 캐시를 모두 제어합니다.

비고

DAB는 캐시 작업에 대한 캐시 제어 응답 헤더를 설정하지 않습니다.

지시문: no-cache

새 읽기를 강제로 수행하고 캐시 계층을 업데이트합니다.

요청

GET /api/Books
Cache-Control: no-cache
Accept: application/json

응답(예)

HTTP/1.1 200 OK
Content-Type: application/json

[
  { "id": 1, "title": "The Hobbit" },
  { "id": 2, "title": "The Silmarillion" }
]

효과: 캐시는 이제 이 새 결과(구성된 TTL에 따라)를 보유합니다.

지시문: 매장 없음

기존 캐시된 값(있는 경우)을 사용합니다. 그렇지 않으면 데이터베이스를 쿼리하지만 캐시를 새 결과로 채웁니다(또는 새로 고침)하지 않습니다.

요청

GET /api/Books
Cache-Control: no-store
Accept: application/json

응답(예)

HTTP/1.1 200 OK
Content-Type: application/json

[
  { "id": 1, "title": "The Hobbit" },
  { "id": 2, "title": "The Silmarillion" }
]

효과: 이 결과가 아직 캐시되지 않은 경우 저장되지 않습니다. 이전 요청이 캐시를 채웁시면 이후 only-if-cached 요청이 실패할 수 있습니다.

검토

  • 데이터베이스에서 새로 고침을 강제 적용하고 캐시를 업데이트해야 하는 경우에 사용합니다 no-cache .
  • 데이터를 원하지만 이 응답이 캐시를 변경하지 않도록 할 때 사용합니다 no-store (기존 캐시된 값을 읽을 수 있음).
  • 일반적인 캐싱 동작에 대한 헤더를 생략합니다.