PATCH를 부분적으로 캐싱한다면?
PUT,DELETE는 왜 아예 캐시할 수 없다고 할까 ?
Cacheable
캐시 가능(cacheable)
한 응답은 캐시할 수 있는 HTTP 응답으로, 나중에 검색하고 사용하기 위해 저장하여 새 요청을 서버에 저장합니다. 모든 HTTP 응답을 캐시할 수 있는 것은 아니며, 캐시할 HTTP 응답에 대한 제약 조건은 다음과 같습니다.
일반적으로 HTTP 요청 중 멱등한 요청들만 캐시할 수 있다고 한다.
(멱등은 여러번 연산이나 작업해도 결과 값이 달라지지 않는 것)
GET, HEAD 등은 Key value 값을 멱등하니 쉽게 캐시할 수 있다고 하고
이러한 이유로 POST PATCH 등도 가능은 하지만, 멱등하지 않아서 캐시를 하지 않는다고 배웠다.
POST와 PUT에 대해 물어보니
간단하게 요약하자면, 멱등성과 안정한 속성이 합쳐져야 사용한다고 알려준다.
예로 GET은 두가지를 만족하기에 쓴다고 생각하면 쉽다.
근데 POST도 가능은 하지만 안쓴다고 하고 PUT도 가능은 하다고 하는데 왜 표준 스펙에는 지원하지 않는다고 하는 지 의문이다..
궁금해서 stackoverflow에도 살펴본 결과
답변도 멱등을 가지지만 역설적으로 캐시가능하지 않다고 한다..
내가 궁금한 건 그 이유인데.. 모지
더 찾아본 결과
PUT의 경우는 없고 OPTIONS의 경우를 찾았다.
변역을 해보면 이건 그냥 그렇게 정의가 되었다고 한다..
그리고 근본적인 이유로는 HTTP 캐시가 표현을 주체로 정의된 것이라는 것인데, 쉽게 설명하자면 CACHE에서 무엇을 가져오는 것이 GET의 방법이라는 이유다.
확실하진 않지만 더 찾아보고 있으니 질문에 대한 답변이 온다면 추가로 작성하겠다.
추가++
김영한님의 대답에도 http에서 그렇게 선언해 둔 것이라고 하신다!