[http] 브라우저 쿠키 도메인은 어떻게 작동합니까?

이상한 도메인 / 하위 도메인 쿠키 문제로 인해 브라우저가 쿠키를 처리하는 방법을 알고 싶습니다. 그들이 다른 방식으로 그렇게한다면, 차이점을 아는 것도 좋을 것입니다.

즉, 브라우저가 쿠키를 수신하면 해당 쿠키에 도메인과 경로가 첨부 될 수 있습니다. 그렇지 않으면 브라우저가 기본값을 대체 할 수 있습니다. 질문 1 : 그들은 무엇입니까?

나중에 브라우저가 요청하려고 할 때 쿠키를 확인하고 해당 요청에 대해 보내야 할 쿠키를 필터링합니다. 요청 경로 및 도메인과 일치 시켜서 수행합니다. 질문 2 : 일치하는 규칙은 무엇입니까?


추가 :

내가 묻는 이유는 일부 경우에 관심이 있기 때문입니다. 처럼:

  • 쿠키를 .example.com사용할 수 www.example.com있습니까?
  • 쿠키를 .example.com사용할 수 example.com있습니까?
  • 쿠키를 example.com사용할 수 www.example.com있습니까?
  • 쿠키를 example.com사용할 수 anotherexample.com있습니까?
  • 의지 www.example.com 을 위해 쿠키를 설정할 수 있습니다 example.com?
  • www.example.com을 위해 쿠키를 설정할 수www2.example.com?
  • www.example.com을 위해 쿠키를 설정할 수.com?
  • 기타.

추가 2 :

또한 누군가 쿠키를 설정하는 방법을 제안 할 수 있습니까?

  • www.example.com또는 다음 중 하나로 설정할 수 있습니다example.com .
  • 그것은 모두가 액세스 www.example.com하고 example.com.


답변

이 있지만 RFC 2965 ( Set-Cookie2이미 폐기했다 2109 RFC ) 해야 요즘 쿠키를 정의, 대부분의 브라우저는 완전히 그를 지원하지만, 단지에 준수하지 않는 넷스케이프에 의해 원래의 사양 .

도메인 속성 값과 유효 도메인 사이에는 차이가 있습니다. 전자는 Set-Cookie헤더 필드 에서 가져 오고 후자는 해당 속성 값의 해석입니다. RFC 2965에 따르면 다음이 적용되어야합니다.

  • 는 IF 설정 – 쿠키 헤더 필드가 없는도메인의 속성을 유효 도메인은 요청의 도메인입니다.
  • 있을 경우 도메인 속성이 존재 (값이 시작되지 않는 경우, 그 값이 유효 영역으로 사용되는 .그 클라이언트가 추가 될 것이다).

유효 도메인이 있으면 설정을 위해 현재 요청 된 도메인 과 도메인 일치 해야합니다 . 그렇지 않으면 쿠키가 수정됩니다. 요청에 보낼 쿠키를 선택하는 경우에도 동일한 규칙이 적용됩니다.


이 지식을 질문에 매핑하면 다음이 적용됩니다.

  • 와 쿠키 Domain=.example.com 것이다 사용할 수 www.example.com
  • 와 쿠키 Domain=.example.com 것이다 사용할 수 example.com
  • 와 쿠키 Domain=example.com로 변환됩니다 .example.com따라서와는 또한 사용할 수 www.example.com
  • 와 쿠키는 Domain=example.com것입니다 하지 사용할 수 anotherexample.com
  • www.example.com example.com에 쿠키를 설정할 수 있습니다
  • www.example.com는 것입니다 하지 에 대한 설정 쿠키 할 수있을 www2.example.com
  • www.example.com.com에 쿠키를 설정할 수 없습니다

그리고 세트에 의해 / 위해 쿠키를 읽을 www.example.comexample.com 을 위해 그것을 설정 .www.example.com하고 .example.com각각. 그러나 첫 번째 ( .www.example.com)는 해당 도메인 아래의 다른 도메인 (예 : foo.www.example.com 또는 bar.www.example.com ) .example.com에만 액세스 할 수 있으며 example.com 아래의 다른 도메인 (예 : foo ) 에서도 액세스 할 수 있습니다 . example.com 또는 bar.example.com ).


답변

이전 답변은 약간 구식입니다.

RFC 6265 는 당시 브라우저 합의를 기반으로 2011 년에 출판되었습니다. 그 이후로, 공개 접미어 도메인과 약간의 합병증이있었습니다. 현재 상황을 설명하는 기사를 작성했습니다. -http //bayou.io/draft/cookie.domain.html

쿠키 도메인과 관련된 규칙을 요약하면 다음과 같습니다.

  • 쿠키 의 원래 도메인 은 원래 요청의 도메인입니다.

  • 원래 도메인이 IP 인 경우 쿠키의 도메인 속성을 설정하지 않아야합니다.

  • 쿠키의 도메인 속성이 설정되지 않은 경우 쿠키는 원래 도메인에만 적용됩니다.

  • 쿠키의 도메인 속성이 설정된 경우

    • 쿠키는 해당 도메인과 모든 하위 도메인에 적용됩니다.
    • 쿠키의 도메인은 원본 도메인과 동일하거나 상위 도메인이어야합니다
    • 쿠키의 도메인은 TLD, 공개 접미사 또는 공개 접미사의 부모가 아니어야합니다.

쿠키는 항상 원래 도메인에 적용 가능하다는 것을 알 수 있습니다.

쿠키 도메인은 다음과 같이 선행 점이 없어야 .foo.com합니다.foo.com

예로서,

  • x.y.z.com자체 또는 부모 쿠키 도메인을 설정할 수 있습니다 – x.y.z.com, y.z.com, z.com. 그러나 com는 공개 접미사입니다.
  • 도메인과 쿠키 = y.z.com에 적용 y.z.com, x.y.z.com, a.x.y.z.com

공공 접미사의 예 – com, edu, uk, co.uk, blogspot.com,compute.amazonaws.com


답변

광범위한 적용 범위는 RFC2965 의 내용을 검토하십시오 . 물론 모든 브라우저가 정확히 같은 방식으로 작동한다는 것을 의미하지는 않습니다.

그러나 일반적으로 쿠키에 지정되지 않은 경우 기본 경로에 대한 규칙은 Set-Cookie 헤더가 도착한 URL의 경로입니다. 마찬가지로 도메인의 기본값은 Set-Cookie가 도착한 URL의 전체 호스트 이름입니다.

도메인에 대한 일치 규칙을 사용하려면 쿠키 도메인에 요청중인 호스트와 일치해야합니다. 쿠키는 include *를 사용하여 더 넓은 도메인 일치를 지정할 수 있습니다. Set-Cookie의 도메인 속성 (브라우저마다 다를 수있는 영역)에서 경로 일치 (도메인 일치 가정)는 요청 된 경로가 쿠키에 지정된 경로 안에 있어야한다는 간단한 문제입니다. 일반적으로 세션 쿠키는 path = / 또는 path = / applicationName /으로 설정되므로 쿠키는 응용 프로그램에 대한 모든 요청에 ​​사용할 수 있습니다.


추가 된 답변 :

  • www.example.com에 .example.com의 쿠키를 사용할 수 있습니까?
  • example.com에서 .example.com의 쿠키를 사용할 수 있습니까? 몰라
  • www.example.com에서 example.com의 쿠키를 사용할 수 있습니까? 하지 말고 … *
  • 다른 example.com에 example.com 쿠키를 사용할 수 있습니까? 아니
  • www.example.com이 example.com에 쿠키를 설정할 수 있습니까?
  • www.example.com이 www2.example.com에 쿠키를 설정할 수 있습니까? 아니요 (.example.com을 통한 제외)
  • www.example.com에서 .com에 쿠키를 설정할 수 있습니까? 아니요 (네임 스페이스를 높이는 쿠키를 설정할 수 없으며 .co.uk와 같은 쿠키를 설정할 수 없습니다) .

*나는 지금 이것을 테스트 할 수는 없지만 적어도 IE7 / 6이 경로 example.com를 마치 것처럼 취급 할 수있는 잉크 링을 가지고 있습니다 .example.com.


답변

이 문제에 대한 마지막 (정확히 세 번째) RFC는 RFC-6265입니다 (RFC-2965는 더 이상 사용되지 않으며 RFC-2109는 더 이상 사용되지 않음).

이에 따라 서버가 도메인의 속성을 생략하는 경우, 사용자 에이전트 만에 쿠키를 반환합니다 원본 서버 (서버 어떤 주어진 자원이 상주에). 그러나 일부 기존 사용자 에이전트는 도메인 속성이 존재 하지 않고 현재 호스트 이름을 포함하는 것처럼 존재하지 않는 도메인 속성을 처리한다고 경고 합니다 (예 : example.com 이 도메인 속성없이 Set-Cookie 헤더를 반환하면 이러한 사용자 에이전트는 쿠키를 www.example.com으로 잘못 전송하십시오).

Domain 속성이 지정되면 완전한 도메인 이름으로 취급됩니다 (속성에 선행 점이 있으면 무시됩니다). 이 쿠키를 얻으려면 서버가 속성에 지정된 도메인과 정확히 일치해야합니다 (정확히 동일한 도메인 이름 또는 하위 도메인이어야 함). 더 정확하게 여기에 지정했습니다 .

예를 들어,

  • 쿠키 속성 Domain=.example.comDomain=example.com
  • 이러한 도메인 속성을 가진 쿠키 는 example.comwww.example.com에서 사용할있습니다.
  • 다른 도메인 속성을 가진 쿠키 는 another-example.com에서 사용할없습니다
  • 쿠키 속성을 지정 Domain=www.example.com하면 www4.example.com에 대한 길을 닫을 수 있습니다.

추신 : 도메인 속성의 후행 쉼표는 사용자 에이전트가 속성 = (


답변

2019의 최신 Chrome, Firefox, Safari에서 모든 사례를 테스트했습니다.

추가 된 답변 :

  • www.example.com에 .example.com의 쿠키를 사용할 수 있습니까?
  • example.com에서 .example.com의 쿠키를 사용할 수 있습니까?
  • www.example.com에서 example.com의 쿠키를 사용할 수 있습니까? 아니요 , 와일드 카드가없는 도메인은 자체 만 일치합니다.
  • 다른 example.com에 example.com 쿠키를 사용할 수 있습니까? 아니
  • www.example.com이 example.com에 쿠키를 설정할 수 있습니까? 아니요 , ‘example.com’이 아닌 ‘.example.com’에 쿠키를 설정할 수 있습니다.
  • www.example.com이 www2.example.com에 쿠키를 설정할 수 있습니까? 아니요 . 그러나 www..example.com에 액세스 할 수있는 .example.com에 쿠키를 설정할 수 있습니다.
  • www.example.com에서 .com에 쿠키를 설정할 수 있습니까? 아니

답변

RFC는 현실을 반영하지 않는 것으로 알려져 있습니다.

더 나은 체크 초안 IETF-httpstate – 쿠키 , 진행중인 작업.


답변

브라우저가 자바 스크립트를 사용하는 쿠키 세트에 대한 약간 다른 규칙 / 해석 인 Set-header 응답 헤더 (서버 측 쿠키 작성)를 수락할지 여부를 결정하는 규칙이 있습니다 (VBScript는 테스트하지 않았습니다).

그런 다음 브라우저가 페이지 요청과 함께 쿠키를 보낼지 여부를 결정하는 규칙이 있습니다.

도메인 일치를 처리하는 방법과 경로 값의 매개 변수를 해석하는 방법은 주요 브라우저 엔진간에 차이가 있습니다. 다른 브라우저가 쿠키를 다르게 처리하는 방법 기사에서 경험적 증거를 찾을 수 있습니다.