WIPIVERSE

HTTP 301

HTTP 301 Moved Permanently

HTTP 301은 HTTP 프로토콜에서 사용되는 상태 코드(Status Code) 중 하나로, "영구 이동(Moved Permanently)"을 의미한다. 클라이언트(웹 브라우저 등)가 요청한 리소스의 URI(주소)가 영구적으로 변경되었음을 서버가 알릴 때 사용된다.

기능 및 동작 방식

서버는 301 응답과 함께 Location 헤더에 새로운 URL을 포함시켜 클라이언트에게 전달한다. 이 응답을 받은 클라이언트(브라우저)는 자동으로 새 URL로 요청을 재전송하며, 사용자에게는 이 과정이 투명하게 이루어진다. 브라우저의 주소 표시줄도 새 URL로 갱신된다.

주요 특징

  • 영구성: 301은 리소스의 이동이 영구적임을 나타낸다. 클라이언트는 이후 동일한 요청이 있을 때 캐시된 정보를 바탕으로 새 URL로 직접 요청하게 된다.
  • 검색 엔진(SEO): 구글, 네이버 등 검색 엔진은 301 응답을 받으면 이전 URL의 검색 순위 권위(링크 주스, link juice)를 새 URL로 이전한다. 검색 엔진은 새 URL을 색인(index)하고 이전 URL의 순위 정보를 승계한다.
  • HTTP 메서드 변경 문제: HTTP 명세(RFC 9110)에 따르면 301 응답 시 클라이언트는 리디렉션 과정에서 요청 메서드를 GET으로 변경해서는 안 된다고 권고하지만, 실제로 많은 브라우저와 사용자 에이전트가 POST 요청에 대한 301 응답을 받으면 GET으로 메서드를 변경한다. 따라서 POST 요청에 대한 영구 리디렉션이 필요할 경우, 메서드 변경이 명시적으로 금지된 308 Permanent Redirect를 사용하는 것이 바람직하다.

주요 사용 사례

  • 도메인 이름 변경(예: oldsite.com → newsite.com)
  • HTTP에서 HTTPS로 전환
  • www 도메인과 non-www 도메인 통일
  • URL 구조 개편(사이트 재설계, 콘텐츠 마이그레이션)
  • 여러 URL을 하나의 정규(Canonical) URL로 통합

관련 상태 코드와의 비교

상태 코드 이름 성격 메서드 유지
301 Moved Permanently 영구 이동 권장되나 보장되지 않음
302 Found 임시 이동 권장되나 보장되지 않음
307 Temporary Redirect 임시 이동 유지됨
308 Permanent Redirect 영구 이동 유지됨

구현 예시

Apache(.htaccess):

Redirect 301 /old-page https://example.com/new-page

Nginx:

location /old-page {
    return 301 https://example.com/new-page;
}

주의사항

  • 301은 영구적인 변경이므로 테스트 목적으로 사용해서는 안 된다. 브라우저와 검색 엔진이 301을 적극적으로 캐시하기 때문에, 잘못 설정한 301을 되돌리기 어려울 수 있다.
  • 리디렉션 체인(A → B → C)을 만들지 말고, 가능하면 이전 URL을 최종 목적지(A → C)로 직접 연결해야 한다. 리디렉션 체인은 지연 시간을 증가시키고 SEO 가치를 희석시킨다.
  • Location 헤더에는 항상 절대 URL(https://example.com/new-page)을 사용하는 것이 권장된다.

HTTP 301은 RFC 9110(HTTP Semantics) 및 이전의 RFC 7231, RFC 2616 등 HTTP 표준 문서에 정의되어 있으며, 웹의 안정적인 운영과 검색 엔진 최적화를 위해 널리 사용되는 핵심적인 HTTP 상태 코드이다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기