[http] 302 리디렉션 중 브라우저 쿠키 보내기

302 리디렉션 중에 쿠키를 다시 보내는 데 문제가 있습니까? 예를 들어 URL 반환 쿠키를 만들고 동일한 응답으로 사용자를 리디렉션하면 (최신) 브라우저가 쿠키를 무시합니까?



답변

대부분의 브라우저는 302 리디렉션에서 쿠키를 허용합니다. 나는 그것을 확신했지만 약간의 검색을했다. 모든 최신 브라우저는 아닙니다 .
Silverlight Client HTTP Stack의 인터넷 아카이브 링크가 제거됨 / 죽음 / Microsoft 연결 Q / A 에서 302 리디렉션 응답에서 Set-Cookie 무시 (2010)

이제 IE6 대신 Windows Mobile 브라우저가 있다고 생각합니다.


답변

이 블로그 게시물에 따르면 : http://blog.dubbelboer.com/2012/11/25/302-cookie.html 모든 주요 브라우저, IE (6, 7, 8, 9, 10), FF (17), Safari (6.0.2), Opera (12.11)는 Windows와 Mac 모두에서 리디렉션에 쿠키를 설정합니다. 이는 301 및 302 리디렉션 모두에 해당됩니다.

@Benni가 언급했듯이 :

https://www.chromium.org/administrators/policy-list-3/cookie-legacy-samesite-policies

쿠키의 SameSite 속성은 쿠키를 자사 또는 동일 사이트 컨텍스트로 제한해야하는지 여부를 지정합니다. SameSite의 여러 값이 허용됩니다.

  • 와 함께 쿠키 "SameSite=Strict"는 동일한 사이트 요청으로 만 전송됩니다.
  • 쿠키 "SameSite=Lax"는 동일한 사이트 요청 또는 “안전한”HTTP 메소드를 사용하는 교차 사이트 최상위 탐색과 함께 전송됩니다.
  • 쿠키 "SameSite=None"는 동일한 사이트 및 교차 사이트 요청과 함께 전송됩니다.


답변

하나의 알림 (개발자의 생명을 구하기 위해) :

IE와 Edge는 쿠키의 도메인이 localhost 일 때 리디렉션 응답에서 Set-Cookie를 무시 합니다.

해결책:

localhost 대신 127.0.0.1 을 사용하십시오 .


답변

다음 은이 문제에 대한 Chromium 버그입니다 (상태 302 인 HTTP 응답에 대해 Set-cookie 무시 됨).


답변

이것은 접근 방식에 대해 정말 눈살을 찌푸 리지만 30x 쿠키 설정 브라우저 동작에 정말로 의존하지 않으려면 쿠키를 설정할 meta http-equiv="refresh"때 HTML “리디렉션”을 사용할 수 있습니다 . 예를 들어, PHP에서 :

<?php
    ...
    setcookie("cookie", "value", ...);
    url="page.php";
?>
<html>
<head><meta http-equiv="refresh" content=1;url="<?=$url?>"></head>
<body><a href="<?=$url?>">Continue...</a></body>
</html>

서버는 적절한 300x 리디렉션 대신 200으로 Set-Cookie를 전송하므로 브라우저는 쿠키를 저장 한 다음 “리디렉션”을 수행합니다. 이 <a>링크는 브라우저가 메타 새로 고침을 수행하지 않는 경우에 대비 한 것입니다.


답변

Firefox와 Safari 모두 에서이 문제가 발생했지만 Chrome은 아닙니다. 내 테스트에서 이것은 리디렉션 중에 도메인이 변경 될 때만 발생합니다. 이것은 OAuth2 흐름에서 일반적입니다.

  1. OAuth2 ID 공급자 (GitHub, Twitter, Google)가 브라우저를 다시 앱으로 리디렉션합니다.
  2. 앱의 콜백 URL이 승인을 확인하고 로그인 쿠키를 설정 한 다음 다시 도착 URL로 리디렉션합니다.
  3. 쿠키 설정없이 도착 URL이로드됩니다.

아직 파악하지 못한 이유로 요청 2의 일부 쿠키는 무시되고 다른 쿠키는 무시됩니다. 그러나 요청 2가 Refresh헤더 와 함께 HTTP 200을 반환하는 경우 ( “메타 새로 고침”리디렉션) 쿠키는 요청 3에 의해 올바르게 설정됩니다.


답변

별도의 API (다른 호스트 이름)가 인증을 처리하고 기본 사이트로 다시 리디렉션하는 .Net에서 OpenIdConnect / IdentityServer를 사용하는 동안이 문제가 발생했습니다.

먼저 (localhost에서 개발하는 경우) 보안되지 않도록 CookieSecure옵션을 설정 SameAsRequest하거나 Never처리 http://localhost/해야합니다. Michael Freidgeim 의 답변을 참조하십시오 .

둘째, CookieSameSite속성을 로 설정해야합니다 Lax. 그렇지 않으면 쿠키가 전혀 저장되지 않습니다. Strict여기서 작동하지 않습니다!