IE9 에서 304 Not Modified가 응답되는 이유(Conditional Request, Unconditional Request)

웹브라우저는 2가지 타입의 요청을 한다. ( Conditional Request , Unconditional Request )
Unconditional Request는 요청하는 자원이 로컬에 캐시가 되어있지 않을 때 생기는 요청이다.
이경우 서버는 200 OK 로 응답한다.
웹브라우저가 Unconditional Request 후에 또 요청을 하게 된다면 캐시 파일이 최신인지를 판단하여 실제 네트워크에서 요청이 가지 않고 캐시된 자원을 사용한다.
캐시된 파일이 만료가 되었으면( max-age, Expires 판단) 웹브라우저는 conditional request를 한다.
클라이언트는 이전에 캐싱 된 응답이 여전히 유효하고 재사용되어야하는지 여부를 판별하기 위해 서버에 conditional request를 한다.
Conditional Request는 If-Modified-Since 및 / 또는 If-None-Match 헤더가 포함되어 있고 이 헤더는 브라우저에 캐시버전을 서버에게 알려준다.
서버는 본문이없는 HTTP / 304 Not Modified 헤더를 반환하여 클라이언트의 복사본이 여전히 최신 상태임을 나타내거나 새 버전의 리소스로 HTTP / 200 OK 응답을 반환하여 갱신한다.
IE가 캐시된 항목을 conditional request 하는 이유
Cache-Control, Expires를 보고 캐시된 자원이 더이상 최신이 아닐 때

References

http://www.dashbay.com/2011/05/internet-explorer-caches-ajax/
https://blogs.msdn.microsoft.com/ieinternals/2010/07/08/understanding-conditional-requests-and-refresh/