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


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

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

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

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

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

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

  • 2016년 06월 13일에 수정됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.
  • 2016년 03월 29일에 작성됨

조회수 179


1 답변


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

ETag(Entity Tag, 서버응답)

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

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

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

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

  • 2016년 06월 01일에 수정됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.
  • 2016년 03월 29일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close