사용예시)
1) PUT URI IF-Match : AABB : "If-Match: AABB"라는 헤더를 포함한 PUT(변경) 요청을 보낸다.
2) 서버는 200 OK, Etag는 CCDD 라고 응답해준다.
3) 다른 클라이언트가 이 사실을 모르고, PUT URI IF-Match : AABB라고 요청을 보냈다.
4) 서버는 ETag AABB가 존재하지 않는다고 412 Precondition(전제조건) Failed를 응답한다.
추가적으로, If-Match에 *를 사용하면, 서버가 가지고 있는 ETag 정보와 상관없이 요청을 처리한다.(조금더 정확하게는 컨텐츠의 내용은 모르겠고, 파일이 존재하기만 한다면 요청을 처리해줘라는 뜻이다)
[최초 요청 예시]
1) GET URL 프록시 서버에 요청
2) origin 서버에 GET URL 요청
3) origin 서버는 200 OK, Last-Modified: Fri, 31 Jul 2017 07:00:00 GMT 라고 응답한다.
4) 프록시 서버는 자신의 디스크나 RAM에 저장한 후 클라이언트에게 응답한다.
[두번째 요청 예시]
1) GET URL 프록시 서버에 요청
2) 프록시 서버는 origin 에게 GET URL 요청 if-modified-since: Fri, 31 Jul 2017 07:00:00 GMT라고 요청한다.
3) origin 서버는 동일한 컨텐츠임을 확인하고 변경된 바가 없으니 직접 제공하라는 메시지인 304 Not Modified를 응답한다.
4) 프록시 서버는 자신의 디스크나 RAM에 저장한 후 클라이언트에게 응답한다.
만약, If-Modified-Since 정보에 오류가 있는 경우에는 어떻게 될까? 잘못된 경우라면 형식이 잘못되었다던지, 서버의 현재시간보다 더 늦은 경우라던지, 이런 경우에 웹서버는 If-Modified-Since 정보를 무시하고 , 컨텐츠 전체를 서비스하게 된다.
[참고자료]
https://withbundo.blogspot.com/2017/07/http-13-http-iii-if-match-if-modified.html