# 캐시 무효화

```
Cache-Control: no-cache, no-store, must-revalidate
```

```
Pragma: no-cache
```

설정과 관계 없이 웹 브라우저가 임의로 캐시를 하는 경우가 있는데 이를 막기 위한 설정이다.

## Cache-Control: no-cache

* 데이터는 캐시해도 되지만 항상 origin 서버에 검증하고 사용한다.
* 이름에 속지말자.

## Cache-Control: no-store

* 데이터에 민감한 정보가 있으므로 저장하면 안된다.
* 메모리에서 사용하고 최대한 빨리 삭제한다.

## Cache-Control: must-revalidate

* 캐시 만료 후 최초로 조회할 때 origin 서버에 검증해야 한다.
* 원 서버 접근에 실패하면 반드시 `504 Gateway Timeout`이 발생해야 한다.
* 캐시 요휴 시간 내에 있다면 캐시를 사용한다.

## Pragma: no-cache

* HTTP 1.0 하위 호환용이다.

![](https://389280719-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LxjHkZu4T9MzJ5fEMNe%2Fsync%2Fb5b31461dd38d0f9b2aaaec02e8acc4c3d7df53d.png?generation=1617536099100769\&alt=media)

클라이언트가 `no-cache`로 서버에 요청하면 프록시 서버는 `no-cache`이므로 원 서버에 요청을 전달한다.

![](https://389280719-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LxjHkZu4T9MzJ5fEMNe%2Fsync%2F81ae814e04e3104f428c09ec305e5fbf2f839319.png?generation=1617536098443323\&alt=media)

원 서버는 적절한 응답을 내려준다.

![](https://389280719-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LxjHkZu4T9MzJ5fEMNe%2Fsync%2Fc48935b252ad8f41001b94093230d8b8f56fbf46.png?generation=1617536098826741\&alt=media)

만약 프록시 캐시 서버가 원 서버에 요청을 보내야하는데 순간적으로 네트워크가 단절돼서 접근이 불가하다면 설정에 따라 프록시 서버에서 캐시 데이터를 반환할 수 있다.

![](https://389280719-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LxjHkZu4T9MzJ5fEMNe%2Fsync%2Ff153ab4e8b7c61a7997e4a631145866f58b4730a.png?generation=1617536099032609\&alt=media)

하지만 `must-revalidate`라면 원 서버에 접근이 불가할 때 `504 Gateway Timeout` 오류를 보낸다. 통장 잔고 등 중요한 정보가 원 서버를 못 탔다고 해서 예전 데이터로 뜬다면 큰 문제가 생긴다. 이런 경우 `must-revalidate`를 써야 한다.
