HEAD는 GET과 똑같이 동작하되 응답 본문 없이 헤더만 돌려받습니다. 파일을 실제로 내려받지 않고 크기·타입·수정 시각·존재 여부만 확인할 때 유용합니다.
다운로드 전 `Content-Length`로 용량을 미리 확인하거나, `ETag`·`Last-Modified`로 캐시 유효성을 점검할 때 자주 씁니다. 링크가 살아 있는지(200/404) 가볍게 검사하는 용도로도 적합합니다.
서버는 GET과 동일한 헤더를 계산해 보내야 하지만 본문은 생략합니다. 정적 서버는 대부분 자동 처리하지만, 동적 핸들러를 직접 짤 때는 HEAD에서 본문을 만들지 않도록 분기해야 불필요한 연산을 아낍니다.
HEAD /downloads/app.zip HTTP/1.1
Host: example.comHTTP/1.1 200 OK
Content-Length: 10485760
Content-Type: application/zip
Accept-Ranges: bytescurl -I https://example.com/downloads/app.zipconst res = await fetch('/downloads/app.zip', { method: 'HEAD' });
const size = res.headers.get('Content-Length');