2016-10-20 3 views
0

현재 REST API를 구축 중입니다. 내가 만드는 많은 리소스는 누가 리소스에 액세스하는지에 관계없이 항상 동일합니다. 그렇지 않은 소수는 Vary: Authorization 헤더를 갖습니다. 당신이 인증하지 않는 경우 당신은 401 응답을 얻을 것이다인증 된 REST API에 대한 HTTP 캐싱

  1. :

    두 가지 예외가있다.

  2. 액세스 권한이없는 일부 리소스에 대해 403 응답을받을 수 있습니다.

제 질문은이 시나리오에서 여전히 올바르게 캐싱을 설정하는 것이 가능하다는 것입니다. 특히 nginx, varnish 또는 haproxy와 같은 역방향 프록시를 사용하여 기본 서비스를 오프로드하고 싶습니다.

이 문제에 대한 우아한 해결책이 있습니까?

+0

변화하는 리소스의 URI가 그렇지 않은 URI와 일치합니까? 예 : 공개 정보, 일부 사용자에게만 표시되는 정보 및 Joe에게만 표시되는 정보를 반환하는/user/joe가 있습니까? –

+0

@ 니콜라스 (Nicholas) 아마도 어쩌면 나는 아주 명확하지는 않았지만, 대부분의 자원에 대해서는 이것이 아닌 * 경우이며, 그런 경우라면 그들은 'Vary : Authorization'을 갖게 될 것이다. 나는 그런 생각이 들지 않는 리소스에만 관심이 있습니다. 항상 200 OK에 대해 동일한 응답을 가지거나 401/403입니다. – Evert

답변

1

Vary: Authorization은 불필요합니다. 권한 부여를 통한 요청에 대한 응답은 자동으로 비공개이며 공유 캐시에 의해 캐시되지 않습니다.

Cache-Control: public을 보내면 이것을 무시할 수 있습니다. 그것으로 응답은 정상적인 규칙을 사용하여 캐싱 될 수 있습니다.

그러나 응답을 인증 된 상태로 유지하려면 인증을 지정해야합니다. Cache-Control: no-cache을 보내어 저장 작업을 수행하기 전에 캐시가 원본을 확인하도록 할 수도 있습니다.

당신은 단지은 역방향 프록시를 원한다면 (예를 들어, 니스, nginx를) 수행 캐싱, 그것은 캐시에서 응답에 속한 "엣지"에 인증을 부과하도록 구성되는 방법을 가지고 가능성이 높습니다 요청에 적절한 인증이있는 경우 자세한 내용은 해당 설명서를 확인하십시오.

+0

감사! 원본에서 바로 답변을 얻으려면 항상 좋은 :) – Evert

관련 문제