서버에서 리스폰스로 받은 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을 구현하는 웹 브라우저에서는 모두 구현되어 있습니다만, 프로그래밍으로 할 경우는 위에 해당하는 캐쉬 제어 및 요청 과정을 직접 프로그래밍 해야 합니다.
댓글 입력