8

이 URL은 Using 301/303/307 redirects for dynamic short urls에 대한 후속 질문으로 대상 URL이 자주 변경 될 때 짧은 URL 리디렉션을 구현하는 가장 좋은 방법을 결정하려고합니다.301 리디렉션 캐싱 방지

301과 307 리다이렉트가 같은 방식으로 수행되는 것처럼 보이지만 301 리다이징 캐싱 (문서화 된 here)과 관련된 문제는 307 리디렉션을 대신 사용하는 것을 피하는 가장 좋은 방법입니다. 307 리디렉션은 절대 캐시되지 않습니까?) 또는 명시 적으로 no-cache 헤더를 보내야합니다 ("Cache-Control : no-cache, must-revalidate")?

+0

관련 : http://stackoverflow.com/questions/12192590/how-to-do-a-non-cached-301-redirect/19003320#19003320 –

답변

16

301 캐싱을 피하려고하지 마십시오. 사용자 에이전트가 리디렉션을 캐시하지 않도록하려면 단순히 301 리디렉션을 사용하지 마십시오. 즉, 301 캐싱은 여기에 있으며 의미 상으로는 영구적 인 리디렉션이므로 도착 URL을 변경하려는 경우 301은 올바른 상태 코드가 아닙니다. 반면에, 307 responses are not cached by default.

+3

해석 내용이 HTTP 사양을 위반합니다. 클라이언트는 301. – Gili

+0

@Gili에 존재하면 Cache-Control을 따라야합니다. 예, 클라이언트는 Cache-Control을 준수해야하지만 301은 여전히 ​​* permanent *입니다. 리다이렉트가 의도되지 않은 경우에는 사용해서는 안됩니다. 퍼머넌트. 영구적이기 때문에 기본적으로 https://tools.ietf.org/html/rfc2616#section-10.3.2 –

+0

301에 정의 된대로 캐싱 할 수 있습니다 (* 기본 * 캐싱 규칙 만 해당). http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-24#section-6.4.2'301 응답은 [...] 명시 적 캐시 컨트롤에 의해 달리 표시되지 않는 한 캐시 가능합니다 여기서 '명시 적 캐시 제어'는 '캐시 제어'및 관련 헤더를 의미합니다. – Gili

8

Google은 브라우저 북마크 및 URL 변경과 같은 301 리디렉션 동작을 원하는 상황에서 동시에 리디렉션을 추적하거나 다른 종류의 기능을 수행하려고합니다. 항상 캐시 제어 헤더를 추가 할 수 있습니다 "아니오 캐시"에

PHP에서
HTTP/1.0 301 Moved Permanently 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Expires: Sat, 26 Jul 1997 05:00:00 GMT 
Location: http://example.com 

는 다음과 같습니다 : 관련

header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'); 
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
header('Location:'.$url, true, 301); 

: https://stackoverflow.com/a/19003320/175071