서버에서 리스폰스로 받은 ETag는 클라이언트 내부에 저장해두나요?

조회수 1172회

스마트 폰 <-> 웹 서버 연동 작업을 하고 있습니다

웹 서버에서 받아온 컨텐츠를 response의 header에 있는 ETag로 구분 해서 캐싱 된 데이터를 쓸지

새로 받아올지를 결정하려고 하는데요

보통 어떤 식으로 구현을 하는지 두가지 궁금한 점이 있어서 질문 드립니다

1.최초 서버 리퀘스트시에 클라이언트는 ETag값이 없는데, If-None-Match 에는 뭘 넣어서 리퀘스트 하나요?

2.서버에서 받은 ETag 값은 클라이언트 내부에 따로 캐싱 해뒀다가 다음 리퀘스트시에 헤더에 넣어서 보내나요?

1 답변

  • 이미 잘 이해하고 계신것 같네요.

    ETag(Entity Tag, 서버응답)

    • 서버에서 생성해서 주어야 합니다. (웹 서버/클라이언트간의 HTTP 규격에서 제시한 캐쉬 제어를 하고자 한다면)
    • 같은 리소스에 대해서 항상 같은 ETag 값을 생성해야 합니다.

    If-None-Match (클라이언트 요청)

    • If-None-Match 는 최초의 요청에서는 사용하지 않습니다.
    • 첫 번째 요청에서 ETag값을 획득하고, 캐쉬 제어를 활용하고자 할 때 사용합니다. 클라이언트에서 알고 있는(캐쉬하고 있는) 리소스를 업데이트(변경된 사항을 반영)하기 위해서 서버에 요청할 때 보내는데, 이 때 서버에서 같은 리소스임을 확인하기 위해서 ETag를 전달해야 합니다.
    • 서버에서 ETag가 같은 리소스를 요청하게 되면 304(캐쉬된 리소스로 리다이렉션하라는 의미) 응답을 하게 되고, 실제 리소스의 내용을 클라이언트에게 전달하지 않습니다.
    • 클라이언트에서 ETag와 ETag에 해당하는 리소스를 일시적으로 보관하고 있어야 합니다.
    • ETag가 없는 리소스에 대해서는 사용할 수 없습니다.

    HTTP/1.1을 구현하는 웹 브라우저에서는 모두 구현되어 있습니다만, 프로그래밍으로 할 경우는 위에 해당하는 캐쉬 제어 및 요청 과정을 직접 프로그래밍 해야 합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)