HTTP 요청 헤더 - if-match, if-modified-since, if-none-match

min_99·2024년 5월 16일

1. If-Match

  • if-match 헤더를 이해하기 위해서 "ETag 해더"를 먼저 이해하는 것이 좋다.

2. ETag 해더란?

  • ETag 해더는 웹서버가 제공하는 컨텐츠들에 각각 부여되는 일종의 식별자 같은 정보이다. (ETag 정보를 표기한다)
  • 사람에게 지문 또는 주민 등록 번호와 같이 개개인을 구별할 수 있는 정보가 있는 것 같이 ETage도 그런것이다.
  • 웹서버는 클라이언트에서 컨텐츠를 제공할때 ETag 정보도 같이 전달한다. 클라이언트와 프록시서버들은 이 정보를 다음요청(subsequent request)에 사용한다.

사용예시)
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 정보와 상관없이 요청을 처리한다.(조금더 정확하게는 컨텐츠의 내용은 모르겠고, 파일이 존재하기만 한다면 요청을 처리해줘라는 뜻이다)

3. If-Modified-Since

  • If-Modified-Since 해더를 이해하기 위해서는 Last-Modifined 헤더의 의미를 먼저 알아야 한다. Last-Modifined 헤더는 컨텐츠가 마지막으로 수정된 시간을 나타낸다.

[최초 요청 예시]
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 정보에 오류가 있는 경우에는 어떻게 될까? 잘못된 경우라면 형식이 잘못되었다던지, 서버의 현재시간보다 더 늦은 경우라던지, 이런 경우에 웹서버는 If-Modified-Since 정보를 무시하고 , 컨텐츠 전체를 서비스하게 된다.

4. IF-None-Match

  • If-Match 헤더와 반대의 의미라고 이해하면 된다.
  • 결국, IF-Match, IF-None-Match 헤더는 서버가 제공하는 컨텐츠의 변경 여부를 확인하기 위해서 사용되는 해더이다.
    • IF-Match : 컨텐츠가 변경되지 않고 같다면...
    • IF-None-Match : 컨텐츠가 변경되었다면...
  • if-match는 200또는 412 전제조건이 잘못되었다는 응답을 리턴한다.
  • if-none-matc는 200 또는 304 Not Modified를 리턴한다.




[참고자료]
https://withbundo.blogspot.com/2017/07/http-13-http-iii-if-match-if-modified.html

0개의 댓글