HTTP 리디렉션 코드의 차이점


151

다양한 HTTP 3XX 리디렉션 코드의 차이점은 명확하지 않습니다. 예, 사양을 읽었지만 표준과 실제 사례 사이에 약간의 차이가있는 것 같습니다.

301리디렉션 코드는 충분히 명확한 보인다 자원이 영구적으로 다른 URI로 이동 한이 방법을, 미래의 요청 URI 것을 사용해야합니다.

그리고 307리디렉션 코드도 분명해 보입니다. 리디렉션이 일시적이고 향후 요청은 여전히 ​​원래 URI를 사용해야 함을 의미합니다.

그러나 302와 의 차이점이 무엇인지 303또는 왜 그들과 실제로 다른지 알 수 없습니다 301. 그것은 그가 보인다 302원래 의도 된 임시 (같은 리디렉션 307), 그러나 실제로, 대부분의 브라우저가처럼 취급 303. 그러나 a 303와 a 의 차이점은 무엇 301입니까? 되어 301리디렉션이 뜻 더 영구적 인?

답변:


139
  • 301 : 영구 리디렉션 이 자원에 대한 후속 요청을하는 클라이언트는 새 URI를 사용해야합니다. 클라이언트는 POST / PUT / DELETE 요청에 대해 리디렉션을 자동으로 수행 해서는 안됩니다 .
  • 302 : 정의되지 않은 이유로 리디렉션합니다. 이 자원에 대한 후속 요청을하는 클라이언트 는 새 URI를 사용 하지 않아야 합니다. 클라이언트는 POST / PUT / DELETE 요청에 대해 리디렉션을 자동으로 수행 해서는 안됩니다 .
  • 303 : 정의되지 않은 이유로 리디렉션합니다. 일반적으로 '작업이 완료되었습니다. 다른 곳에서 계속하십시오.' 이 자원에 대한 후속 요청을하는 클라이언트 는 새 URI를 사용 하지 않아야 합니다. 클라이언트 는 POST / PUT / DELETE 요청의 리디렉션을 따라야하지만 후속 요청에는 GET을 사용해야 합니다.
  • 307 : 임시 리디렉션 나중에 리소스가이 위치로 돌아올 수 있습니다. 이 자원에 대한 후속 요청을하는 클라이언트는 이전 URI를 사용해야합니다. 클라이언트는 POST / PUT / DELETE 요청에 대해 리디렉션을 자동으로 수행 해서는 안됩니다 .

당신이 선택할 수 있다면 개인적으로 302를 피하는 것이 좋습니다. 많은 클라이언트는 302가 발생할 때 사양을 따르지 않습니다. 임시 리디렉션의 경우 비 GET 요청에서 원하는 동작 유형에 따라 303 또는 307을 사용해야합니다. POST / PUT / DELETE에서 대체 동작이 필요하지 않은 경우 307-303을 선호하십시오.


26
아니. 303 이후에는 GET에 메소드를 다시 작성해야합니다. 다른 방법을 따르려면 방법을 유지해야하지만 방법이 안전하지 않은 경우 UA에 확인해야합니다 (따라서 OPTIONS, HEAD, GET, PROPFIND ... 이외의 방법)
— Julian Reschke

1
@JulianReschke 당신은 당신의 진술을 뒷받침하는 사양의 장소를 가리켜 주시겠습니까?
— Piotr Dobrogost

7
@BobAman 설명에서 원래 HTTP 스펙 ( RFC 1945 ) 에서했던 것과 동일한 실수를하고 있습니다. 예를 들어 클라이언트는 POST / PUT / DELETE 요청에 대한 리디렉션을 따라야합니다. 다음 요청에 사용하기 위해 http 동사가 오해의 소지가 있어야 함 을 지정 하지 않고 303 리디렉션 후 ...
— Piotr Dobrogost

2
나 자신을 수정 : "303을 따르려면 초기 방법이 HEAD가 아닌 한 GET에 방법을 다시 작성해야합니다."
— Julian Reschke

2
Piotr : 기본값은 메소드를 수정 하지 않아야합니다 . 이동 된 리소스는 조작 방법에 영향을 미치지 않습니다. 303은 예외입니다. "자원이 이동했다"는 의미는 아니지만 "요청이 처리되었으며 결과는 다음과 같습니다"; 완전히 다른 유형의 리디렉션입니다. greenbytes.de/tech/webdav/…
— Julian Reschke

84

303과 307의 차이점은 다음과 같습니다.

303 : 다른 것을보십시오. 요청이 올바르게 수신되었지만 리디렉션 URL에서 GET을 사용하여 결과를 검색해야합니다.

307 : 임시 리디렉션 전체 요청은 새 URL로 리디렉션되어야합니다. 모든 게시물 데이터를 다시 게시해야합니다.

참고이 302 (307)의 동작을하도록하지만, 대부분의 브라우저는 (303)의 동작 (둘 다 다시 존재하지 않았다)로 구현되었습니다. 따라서이 두 가지 새로운 코드가 302를 대체하기 위해 도입되었습니다.

301과 303의 차이점 :

301 : 문서가 이동되었습니다. 향후 요청에는 새 URL을 사용해야합니다. 이 URL은 더 이상 사용되지 않습니다.

참고 :이 코드에주의하십시오. 브라우저와 프록시는 실제로 공격적인 캐싱을 적용하는 경향이 있으므로 301로 응답하면 누군가가 해당 URL을 다시 방문하는 데 시간이 오래 걸릴 수 있습니다.

303 : 요청이 올바르게 수신되었습니다. 모든 PUT 요청이 처리됩니다. 결과 문서는 리디렉션 URL에서 검색 할 수 있습니다. 향후 요청은 여전히 ​​원래 URL로 이동해야합니다.


3xx에 대한 자세한 내용과 관련된 모든 문제에 관한 좋은 블로그 게시물은 다음과 같습니다. insanecoding.blogspot.no/2014/02/…
— arcuri82

@ skeller88 당신이 변경하면 내 대답이 틀렸으므로 되돌 렸습니다 (변경을 수락 한 사람들에게). 허용 된 답변과 동일한 실수를 소개했습니다. 303 리디렉션 및 다른 규칙의 다른 종류의 적용, 허용 대답에 줄리안 Reschke에 의한 의견과 arcuri82 연결했습니다 블로그에 의해 확인 된
— GolezTrol
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.