HTTP 리디렉션 : 301 (영구) vs. 302 (임시)


381

클라이언트가 다르게 행동해야합니까? 어떻게?


RFC 2616-HTTP 상태 코드 나는 거기에 모든 것을 반복 할 수 있지만, 그것은 분명히 명확하게 말해;)
Tiemen

2
이 사양은 더 미묘한 임시 리디렉션을 위해 303 및 307 상태 코드도 제공한다는 점에 주목할 가치가 있습니다.
Patrick McElhaney

303과 307은 더 이상 필요하지 않습니다. 303은 새 URL이 관련되어 있지만 동일하지는 않으며 현재 요청이 POST 인 경우에도 GET과 함께로드되어야한다고 지정했지만 브라우저도 302를 사용하여이 작업을 수행합니다. 307은 일시적인지 여부를 지정하지 않은 302와 달리 리디렉션이 일시적임을 명시 적으로 지정해야했지만 브라우저와 크롤러는 302를 일시적인 것으로 취급합니다.
thomasrutter

답변:


569

상태 301은 리소스 (페이지)가 새 위치로 영구적으로 이동되었음을 의미합니다. 클라이언트 / 브라우저는 원래 위치를 요청하지 말고 지금부터 새 위치를 사용해야합니다.

상태 302는 리소스가 일시적으로 다른 곳에 위치하고 클라이언트 / 브라우저가 계속 원래 URL을 요청해야 함을 의미합니다.


12
감사합니다. 301 (영구적) 리디렉션을 사용하는 경우 클라이언트가 이전 위치를 다시 검색하지 않고 항상 새 URL을 직접 사용하기로 결정할 수 있습니까?
flybywire

18
바로 그거죠! 실제로 사양에 따르면 클라이언트는 항상 새 위치로 이동해야합니다.
Philippe Leybaert

7
그러나 브라우저에서 이것이 어떻게 영향을 줍니까? 예를 들어 301에서 잘못된 기록으로 돌아 가지 않도록 뒤로 버튼에서 기록을 다시 작성 하시겠습니까? 오래된 북마크를 클릭하면 301에 북마크를 자동으로 변경 하시겠습니까?
Xavi Montero

9
@XaviMontero 대부분의 최신 브라우저는 301을 캐시하고 최대 6 개월 동안 원본 소스를 전혀 요청하지 않습니다
Jon

34
HTTP를 기억하는 속임수 상태 코드 301> 파마와 302> 온도 리디렉션 두 T.와 임시 시작과 동일, T로 시작
ScottCate

108

검색 엔진 스파이더는 웹 페이지의 응답 헤더에서 301 상태 코드를 찾으면이 웹 페이지가 더 이상 존재하지 않음을 이해하고 응답으로 위치 헤더를 검색하여 새 URL을 선택하고 색인 된 URL을 새 URL로 바꾸고 페이지 순위를 전송합니다. .

따라서 검색 엔진은 더 이상 존재하지 않는 모든 색인화 된 URL (301 발견)을 새 URL로 새로 고칩니다. 그러면 기존 웹 페이지 트래픽이 유지되고 페이지 순위가 변경되어 새 웹 페이지로 전환됩니다 (이전 웹 페이지의 트래픽을 잃지 않습니다).

브라우저 : 브라우저가 301 상태 코드를 찾으면 이전 URL과 새 URL의 매핑을 캐시하고 클라이언트 / 브라우저는 원래 위치를 요청하지 않고 캐시가 지워지지 않는 한 지금부터 새 위치를 사용합니다.

여기에 이미지 설명을 입력하십시오

검색 엔진 스파이더는 웹 페이지의 302 상태를 찾으면 일시적으로 새 위치로 리디렉션하고 두 페이지를 크롤링합니다. 기존 웹 페이지 URL은 여전히 ​​검색 엔진 데이터베이스에 존재하며 항상 이전 위치를 요청하고 크롤링하려고합니다. 클라이언트 / 브라우저는 여전히 원래 위치를 요청하려고 시도합니다.

여기에 이미지 설명을 입력하십시오

- asp.net C #에서 그것을 구현하고 검색 엔진에 미치는 영향은 무엇인가하는 방법에 대한 자세한 정보를 참조 http://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet -csharp-Implementation.html


35

크롤러가이를 고려하여 301을 사용할 때 PageRank를 전송하기 때문에 대부분 301 대 302는 검색 엔진에서 색인을 생성하는 데 중요합니다.

자세한 내용은 Peter Lee의 답변 을 참조하십시오.


20

301은 요청 된 리소스에 새로운 영구 URI가 할당되었으며이 리소스에 대한 향후 참조는 반환 된 URI 중 하나를 사용하여 수행해야한다는 것입니다.

302는 요청 된 자원이 일시적으로 다른 URI에 상주한다는 것입니다.

경우에 따라 리디렉션이 변경 될 수 있으므로 클라이언트는 향후 요청에 계속 Request-URI를 사용해야합니다.

이 응답은 Cache-Control 또는 Expires 헤더 필드로 표시된 경우에만 캐시 할 수 있습니다.


1
따라서 301은 의미가 있지만 302에 대한 좋은 예제 사용을 위해 어려움을 겪고 있습니다 .
Bob Stein

4
@ BobStein-VisiBone (302 리디렉션의 예) : 코드 <?php header("location: http://example.com/new.php"); ?>와 파일 new.php를 사용하여 old.php 파일을 만들고 링크<?php echo 'I am new'; ?> 로 이동 하십시오 . "I am new"텍스트를 리디렉션하고 표시합니다. 그런 다음 old.php의 코드를로 바꾸고 링크<?php echo 'I am old'; ?> 로 이동 하십시오 . "I old"라는 텍스트가 표시됩니다. old.php에서 301 리디렉션을 수행했다면 old.php의 코드가 변경된 후에도 "I am new"라는 텍스트가 표시 될 것입니다.
사도

2
@ BobStein-VisiBone 더 이상 사용되지 않아 표시 할 수없는 페이지가 있습니다. 새 페이지를 만들어야하지만 잠시 준비가되지 않습니다. 방문자에게 유용한 기존 페이지로의 임시 리디렉션을 사용합니다. 새 페이지가 생성되면 영구적 인 리디렉션을 사용합니다.
EddieC

4
302는 도착 URL이 상태에 의존하는 경우 유용합니다.
Brian

7
나는 지금 오래되었지만 여기에 좋은 예가 있습니다. 웹 코믹스에는 일반적으로 최신 만화로 연결되는 URL이 있습니다. 이것이 301로 webcomic.com/latest리디렉션 webcomic.com/some-comic-title되면 브라우저는 항상 "some-comic-title"로 리디렉션합니다. 다음 만화가 출판되고 "최신"이 이제 "다른 코믹 타이틀"로 리디렉션 될 때에도 302가 더 나을 것입니다.
hsan

17

301 리디렉션은 (적어도 일부 브라우저에서) 무한정 캐시됩니다 .

즉, 301을 설정하면 해당 페이지를 방문하면 리디렉션 될뿐만 아니라 리디렉션이 캐시됩니다.

해당 페이지를 다시 방문하면 브라우저 *가 해당 URL을 요청하지 않아도 캐시 된 리디렉션 대상으로 이동합니다.

캐시에서 해당 리디렉션이있는 방문자에 대해 301을 취소하는 유일한 방법은 원래 URL로 다시 리디렉션하는 것입니다 **. 이 경우 브라우저는 루프를 확인하고 입력 된 URL을 실제로 요청합니다.

페이스 북이나 당신이 완전히 통제 할 수없는 다른 리소스로 301을 결정했다면 분명히 옵션이 아닙니다.

불행히도, 많은 호스팅 제공 업체는 관리 인터페이스에 간단히 "리디렉션"이라고하는 기능을 제공합니다. 이 기능을 사용하여 도메인을 페이스 북으로 일시적으로 리디렉션하는 경우 기본적으로 문제가 있습니다.

* 브라우저가 HTTP 301얼마나 오래 캐시합니까? . Chrome 45를 사용하여 방금 시도해 보았습니다. 편집 : Mac의 Safari 7.0.6도 캐시로 브라우저를 다시 시작해도 도움이되지 않습니다 (Link는 Windows의 Safari 5에서는 도움이된다고 말합니다).

** window.location = ''대부분의 경우에 적용 할 수있는 솔루션이기 때문에 javascript을 시도했지만 작동하지 않습니다. 감지되지 않은 무한 루프가 발생합니다. 그러나 PHP header('Location: new.url')는 루프를 깰

결론 : 해당 URL을 다시 사용하지 않을 것이라고 확신하는 경우 301 만 사용하십시오. 일반적으로 루트 디렉토리 (example.com/)에는 존재하지 않습니다.


7

301의 주요 문제는 서버 수준에서 리디렉션을 비활성화 한 경우에도 브라우저가 리디렉션을 캐시한다는 것입니다.

짧은 유지 관리 기간 동안 리디렉션을 활성화 할 경우 항상 302를 사용하는 것이 좋습니다.


확실히 "문제"가 아닙니다. 그것이 의도 된 방식 일뿐입니다. HTTP를 HTTPS로 리디렉션하고, 포기한 웹 사이트를 새로운 웹 사이트로 리디렉션하는 등의 일반적인 사용법은 301의 일부입니다.
HosseyNJF
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.