요약

  • HTTP 404는 접근할 수 없는 자원이 일시적으로 빠져 있는지, 영구적으로 은퇴했는지, 아니면 단순히 공개되지 않았는지를 의도적으로 밝히지 않습니다. 410은 원본 서버가 '영구 철수 가능성이 높다'는 주장을 방어할 수 있는 더 좁은 사례를 위해 만들어졌습니다.
  • 이 강한 신호는 링크 편집자와 캐시에 지침을 줄 수 있지만, 그 권위는 원본 서버에서 끝납니다. 410은 아카이브를 지우거나, 원격 사이트에 명령하거나, 모든 사본이 사라졌음을 증명하지 않습니다.

같은 빈 페이지가 서로 다른 증거를 담을 수 있다

실패한 요청은 단일한 사실이 아닙니다. 서버가 잠시만 오프라인일 수도 있습니다. 발행 실수로 대상이 이동했을 수도 있습니다. 운영자가 접근 금지된 자원의 존재 여부를 밝히기를 거부할 수도 있습니다. 캠페인 페이지가 목적을 다 마쳤을 수도 있고, 직원 프로필이 의도적으로 은퇴했을 수도 있습니다. 독자에게는 모든 경우가 빈 목적지처럼 보입니다. 유지보수 시스템 입장에서 이들을 동일하게 취급하면 거버넌스 문제가 생깁니다.

초기 웹은 이 불확실성에 대해 널리 인정받는 하나의 답을 갖고 있었습니다. 1996년 HTTP/1.0 실무를 정리한RFC 1945는 404를 나열했지만 410은 없었습니다. 정의는 이 한계를 명시했습니다. 응답은 부재 상태가 일시적인지 영구적인지 말하지 않는다는 것이었습니다. 이 모호성은 유용했습니다. 서버는 생명주기 판정을 지어내지 않고도 자신이 아는 것을 보고할 수 있었습니다.

그러나 원본 서버가 결정을 내린 뒤에도 모호성이 지속되면 비용이 큽니다. 링크 검사기는 기다려야 하는지, 재시도해야 하는지, 편집자에게 알려야 하는지, 참조를 제거해야 하는지 판단할 수 없습니다. 캐시는 또 하나의 부재 응답을 보고 일시적 공백과 은퇴 선언을 구분할 수 없습니다. 반복은 증거를 대신하는 민간 관습처럼 될 수 있습니다. 충분히 여러 번 실패하면 외부 시스템은 자원이 죽었다고 추측합니다. 그 추측은 실용적일 수 있지만 원본 서버의 주장은 아닙니다.

HTTP/1.1은 원본 서버에 더 강한 문장을 주었다

1997년 1월에 발표된RFC 2068은 410 Gone을 추가했습니다. 첫 formulation은 놀랍도록 운영적이었습니다. 요청한 자원은 더 이상 제공되지 않고, 전달 주소도 알려져 있지 않으며, 이 상태는 영구적인 것으로 다뤄져야 한다는 것이었습니다. 링크를 편집할 수 있는 클라이언트는 사용자 승인을 거쳐 참조를 삭제하도록 지시받았습니다. 서버가 영구성을 판단할 수 없으면 404로 되돌아가야 했습니다.

이 구분은 부재를 두 등급의 증거로 만들었습니다. 404는 불확실성에 대한 정직한 답으로 남았습니다. 410은 설정, 편집상의 은퇴 결정 또는 다른 소유된 생명주기 상태에서 나올 수 있는 지식을 요구했습니다. 숫자의 차이가 원본 서버를 전지적으로 만든 것은 아닙니다. 원본 서버가 더 강한 진술을 선택하는 데 대한 책임을 지게 만든 것입니다.

사용자 승인 조항은 또한 이 명세가 상상한 웹을 드러냅니다. 수신자는 단순한 수동 화면이 아니었습니다. 하이퍼텍스트 그래프를 유지하다가 목적지가 스스로 사라졌다고 선언하면 참조를 복구할 수 있었습니다. 그러나 초기 규칙조차 그 그래프의 통제권을 원본 서버에 넘기지 않았습니다. 삭제는 원격 클라이언트가 수행하며, 인간이 의사결정 고리에 남아 있을 수 있었습니다.

“영구”가 “영구 가능성이 높음”이 되기까지

이후 명세들은 메커니즘을 유지하면서 확실성을 좁혔습니다.RFC 2616은 410을 주로 웹 유지보수를 돕는 수단으로 설명했습니다. 자원은 의도적으로 제공되지 않으며, 서버 소유자는 원격 링크가 제거되기를 원한다는 것이었습니다. 또한 운영자가 영구적으로 제공되지 않는 모든 자원에 Gone을 표시할 의무는 없고, 표시를 정해진 기간 동안 유지할 의무도 없다고 밝혔습니다.

RFC 7231과RFC 9110에 담긴 현재 의미론은 이 상태를영구 가능성이 높은상태로 설명합니다. 이 단어가 중요합니다. 응답은 나중에 되돌려질 수 있습니다. 은퇴한 페이지가 돌아올 수 있습니다. 운영자가 마이그레이션 지도가 불완전했음을 발견할 수도 있습니다. HTTP는 URI의 미래에 대한 형이상학적 보장이 아니라, 현재 원본 서버의 지식과 예상 지속 기간에 대한 공개 진술을 제공합니다.

현재의 404 규칙은 그에 상응하게 넓습니다. 현재 제공 가능한 표현을 찾지 못했다는 뜻일 수도 있고, 존재하지만 공개하지 않겠다는 뜻일 수도 있습니다. 여전히 일시적 부재와 영구적 부재에 대해서는 아무것도 말하지 않습니다. 따라서 410을 선택하면 가능한 해석의 폭을 줄입니다. 운영자가 그 감소의 결과를 감당할 만큼 충분한 권한과 증거를 갖추었을 때 사용해야 합니다.

새 요청 없이 전파될 수 있는 유지보수 신호

이후 명세들은 또한 410을 휴리스틱하게 캐시 가능한 응답으로 만들었습니다.RFC 9111은 일반 메커니즘을 설명합니다. 원본 서버가 명시적 만료 시각을 제공하지 않으면, 캐시는 프로토콜 규칙에 따라 유한한 신선도 수명을 계산할 수 있습니다. 응답이 신선한 동안 캐시는 원본 서버에 다시 묻는 대신 그 응답을 재사용할 수 있습니다.

이 덕분에 410은 고립된 한 번의 교류 그 이상이 됩니다. 은퇴 선언은 중개자를 통해 일시적으로 전파되고, 반복 요청을 줄이며, 유지보수 시스템에 안정적인 증거를 줄 수 있습니다. 동시에 롤백 비용도 만들어냅니다. 원본 서버가 실수로 410을 보냈다면, 정정된 페이지가 모든 곳에서 한꺼번에 보이지 않을 수 있습니다. 명시적 캐시 제어, 퍼지(purge) 능력, 복구 테스트는 상태 코드와 하나의 운영적 결정에 속합니다.

휴리스틱 캐시 가능성은 영원함이 아닙니다. 캐시의 신선도 계산은 만기되고, 오래된 응답은 재검증 및 재사용 규칙의 지배를 받습니다. 캐시된 410이 저장소에서 근본 자원이 삭제됐음을 증명하지도 않습니다. 응답이 생성된 시점에 원본 서버에서의 접근이 제공 불가능하다고 보고되었다는 것만 말합니다.

원본 서버는 웹의 기억을 소유하지 않는다

“원격 링크가 제거되기를 희망한다”는 문구는 다른 기관들에 대한 명령이 아니라 조정 요청을 정의합니다. 원격 발행자는 자신의 인용을 소유합니다. 아카이브는 자신의 보존 정책과 과거 캡처를 소유합니다. 검색 시스템은 색인 결정을 소유합니다. 캐시는 유한한 재사용 계산을 소유합니다. HTTP는 각 주체에게 공통 신호를 주지만, 그들의 권한을 원본 서버의 권한으로 통합하지 않습니다.

이 경계 덕분에 현재의 접근 결정이 역사에 대한 거짓 주장이 되지 않습니다. 410은 자원이 존재한 적이 없다고 말하지 않습니다. 응답을 보낸 주체를 인증하거나, 기록을 유출적으로 감춘 합법적 권한을 증명하거나, 복제본이 모두 사라졌음을 보증하지 않습니다. 아카이브에 과거 버전을 파기하라고 지시하지도 않습니다. 독립적인 시간 기반 아카이브는 현재 원본 서버가 Gone을 반환하는 동안에도 오래된 상태에 대한 접근을 제공할 수 있습니다. 둘은 별개의 표면입니다.

같은 경계가 410을 리다이렉트와 구분합니다. 합법적인 후속 위치가 존재한다면 301이나 308은 새 URI를 지정해 내비게이션을 유지할 수 있습니다. Gone은 상태 수준의 전달 약속 없이 기존 접근 경로가 은퇴하는 자원을 위한 것입니다. 451과도 다릅니다. 451은 접근 불가의 이유로 법적 차단을 드러냅니다. 상태 코드는 장식적인 동의어가 아닙니다. 각 코드는 발신자에게 서로 다른 주장을, 수신자에게 서로 다른 복구 선택을 배분합니다.

더 강한 부재에는 더 강한 소유권이 필요하다

실용적 질문은 “이 URL이 아무것도 반환하는가?”가 아닙니다. “누가 이 부재가 의도적임을 알고, 얼마나 지속될 가능성이 있으며, 누가 다운스트림 대응을 책임질 준비가 되어 있는가?”입니다. 그러므로 신뢰할 수 있는 은퇴 절차는 410을 결정 기록, 책임 있는 소유자, 캐시 정책, 리다이렉트 검토, 링크 목록, 검증된 복구 경로와 결합해야 합니다.

이렇게 사용하면 410은 분산 조정에서 작지만 오래 남는 문제를 해결합니다. 원본 서버는 모든 원격 시스템이 침묵으로부터 영구성을 추론하도록 강요하지 않을 수 있습니다. 대신 하나의 엔드포인트에 대한 권한이 그에 대한 모든 기억에 대한 권한을 포함하지 않는다는 점을 가장해선 안 됩니다. 부재가 말할 수 있을 때 웹은 유지보수가 쉬워집니다. 다만 화자의 관할권이 계속 드러나 있을 때만 그렇습니다.

출처와 한계

IANA HTTP 상태 코드 레지스트리는 현재 410을 “Gone”으로 등록하고RFC 9110의 15.5.11절을 가리킵니다. 이 글은 또한RFC 1945,RFC 2068,RFC 2616,RFC 7231,RFC 9111에 의존합니다. 이 문서들은 의미론과 레지스트리 상태를 확립할 뿐, 모든 크롤러, 프레임워크, 브라우저, 캐시, 아카이브에서의 현재 행동을 확립하지 않습니다.