HTTP/HTTP 헤더
HTTP 프로토콜 If-None-Match 헤더
hippo 데브옵스
2022. 6. 25. 16:14
- If-None-Match 헤더는 If-Match 헤더와 비슷하지만 GET 방식에 있어서 차이가 있음
- If-None-Match 헤더는 GET에서는 If-Modified-Since 헤더처럼 사용
- If-None-Match 헤더를 이용해서 컨텐츠의 변경여부를 묻고 컨텐츠가 변경되지 않는 경우(기존 컨텐츠의 ETage정보가 요청의 If-None-Match 헤더의 ETag와 같다면) "304 Not Modified" 메시지를 전달
If-None-Match 헤더의 동작흐름
1. 먼저 GET으로 최초 이미지 컨텐츠를 요청한 후 ETag 정보를 받음
$ curl -H "Accept: application/json" -i http://localhost:8080/spring-boot-rest/foos/1
HTTP/1.1 200 OK
ETag: "f88dd058fe004909615a64f01be66a7"
Content-Type: application/json;charset=UTF-8
Content-Length: 52
2. 클라이언트가 If-None-Match 헤더에 동일한 ETag 를 전달하는 경우와 그렇지 않은 경우를 확인
웹서버는 If-None-Match 헤더의 값이 같은 경우 304 상태 코드를 반환 → 정상 응답 코드
웹서버는 If-None-Match 헤더의 값이 다른 경우 200 상태코드를 반환 → 정상 응답 코드
GET에서는 If-None-Match의 값이 ETag와 같을 경우 캐싱되어 있는 이미지를 사용할 수 있도록 304 상태코드를 반환
If-None-Match 헤더는 If-Modified-Since 헤더와 같은 목적으로 사용
## 확인한 ETag와 If-None-Match 헤더의 ETag가 동일한 경우 $ curl -H "Accept: application/json" -H 'If-None-Match: "f88dd058fe004909615a64f01be66a7" -i http://localhost:8080/spring-boot-rest/foos/1 HTTP/1.1 304 Not Modified ETag: "f88dd058fe004909615a64f01be66a7" ## 확인한 ETag와 If-None-Match 헤더의 ETag가 다른 경우 $ curl -H "Content-Type: application/json" -i -X PUT --data '{ "id":1, "name":"Transformers2"}' http://localhost:8080/spring-boot-rest/foos/1 HTTP/1.1 200 OK ETag: "d41d8cd98f00b204e9800998ecf8427e" Content-Length: 0
If-None-Match 헤더와 If-Modified-Since 헤더의 차이
- If-Modified-Since 헤더는 시간 정보를 담기 때문에 웹서버나 클라이언트의 환경적인 측면에서 정보의 정확성이 보장 X
- If-None-Match 헤더는 ETag 정보를 활용하기 때문에 컨텐츠의 변경 유무를 아주 정확하게 반영 가능
If-None-Match 헤더와 If-Match 헤더의 차이
- If-Match 헤더는 PUT과 같이 덮어쓰기 위한 동작에 사용 → 새로운 파일 생성을 금지
- If-None-Match 헤더는 신규로 생성하기 위한 동작에 사용 → 파일 덮어쓰기를 금지하는 컨셉