(망함) Caddy, astro와 Nix의 환장 콜라보


요약

새 글을 쓰고 당당하게 배포를 했는데 홈페이지가 업데이트… 안돼? 계속 예전글이 최신으로 나와? 캐시를 날려야만 새 글이 보인다구?

브라우저 관점

홈페이지를 새로고침 했는데 서버에서 304 not modified를 보내준다. 어라? 예전 캐시를 그냥 쓰면 되겠네? - 문제의 시작

왜? 서버는 304를 보냈는가

보니까 갱신 체크를 modified time + file size로 하나 본데, modified time이 1970-01-01 00:00:01 (그러니까, unix epoch 타임 + 1초) 이어서 시간 검사는 무용지물이 되었고 파일 크기만 남았다. 즉 우연히 홈페이지 파일 크기가 동일하면 제대로 업데이트가 안된다는 상황

왜? epoch time이 되었는가

알고보니 nix에서 빌드하면서 모조리 epoch로 리셋을 해버린다. 따로 설정할 방법도 없는듯

그럼 어떻게 해?

보시다시피 뻘글 하나 더 써서 크기가 달라지길 비는 수밖에… 아니면 파일명에 내용물 hash를 붙이는 방법이 있을텐데 index.html에 적용할 순 없으니…

그럼 어떻게 해? ver 2

그 이후에도 여전히 갱신 문제가 생겨서 좀 더 파보니,

  • 아마 파일 크기로 ETag 만드는건 file_server에선 아예 안하는듯?
  • 따라서 오직 modified-time만 쓰는데, 이제 아예 epoch였으면 go http 서버에서 걸러줬을 텐데 epoch + 1초라서 Go 구현에서도 안거르고 보내고 있는듯?
  • Caddy 설정에서 특정 헤더를 제거하는 기능이 있으니 그걸로 아예 Last-Modified 헤더를 제거하는 게 낫겠다는 듯?

일단은 Last-Modified를 제거해둔 상황. 엄연히 캐시를 쓰는게 좋은데 이것때문에 못쓴다니 고통스럽다.