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.