웹 서버가 리소스 요청에 응답할 때 서버는 응답과 함께 Set-Cookie
헤더를 포함할 수 있습니다. 이 헤더는 브라우저에 쿠키를 저장하도록 지시합니다. 예를 들면 Set-Cookie:cat=tabby
입니다.
쿠키란 무엇인가요?에서 쿠키의 작동 방식을 설명합니다.
Set-Cookie
는 쿠키 이름과 값을 제공하는 것 외에도 쿠키가 설정되는지 여부와 만료 시점을 제어하는 속성을 포함할 수 있습니다. 쿠키 속성은 세미콜론으로 구분됩니다. 예를 들면 다음과 같습니다.
Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
이 도움말에서는 가장 중요한 쿠키 속성을 설명합니다.
HTTP 쿠키 사용에서는 쿠키 속성을 더 기술적으로 자세히 설명합니다.
보안
👉 모든 쿠키에 기본적으로 Secure
를 포함해야 합니다.
Set-Cookie
헤더에 Secure
가 포함된 경우 쿠키는 HTTPS 프로토콜을 사용하는 암호화된 요청에만 포함됩니다. 쿠키는 HTTP 요청에 포함되지 않습니다. 이렇게 하면 공격자가 브라우저와 서버 간의 통신에 몰래 개입하여 정보를 전달하고 잠재적으로 이를 변경하는 중간자 공격을 방지하는 데 도움이 됩니다.
HTTPOnly
👉 모든 쿠키에 기본적으로 HTTPOnly
를 포함해야 합니다. JavaScript 액세스가 필요한 경우에만 생략하세요.
Set-Cookie
헤더에 HTTPOnly
가 포함된 경우 document.cookie
를 사용하여 쿠키에 액세스할 수 없습니다. 이렇게 하면 쿠키를 타겟팅하는 특정 유형의 공격으로부터 보호할 수 있습니다.
SameSite
👉 값이 설정되지 않은 경우 기본값은 SameSite=Lax
입니다. SameSite=None
는 교차 사이트 쿠키를 허용하지만 서드 파티 쿠키 제한이 적용되는 위치에서는 쿠키가 차단됩니다.
방문 중인 사이트와 다른 사이트의 리소스를 요청하는 경우 크로스 사이트 요청입니다. 교차 사이트 요청에 대한 응답으로 설정된 쿠키를 서드 파티 쿠키라고 합니다. 자세한 내용은 서드 파티 쿠키란 무엇인가요?를 참고하세요.
SameSite
속성은 서드 파티 쿠키가 요청에 포함될지 여부를 제어합니다. 가능한 값은 Strict
, Lax
, None
의 세 가지입니다.
엄격
쿠키는 쿠키의 출처 사이트에 있는 페이지의 요청에 대한 응답으로만 전송됩니다. 예를 들어 사용자가 cats.example
를 방문하고 SameSite=Strict
속성이 설정된 쿠키가 있다고 가정해 보겠습니다. 나중에 사용자가 다른 사이트에 있는 상태에서 cats.example
의 페이지로 연결되는 링크를 클릭합니다. 설정된 쿠키는 해당 요청에 포함되지 않습니다.
느슨함
이는 Strict
와 동일한 방식으로 작동하지만, 사용자가 쿠키의 출처 사이트로 연결되는 링크를 클릭할 때 브라우저에 쿠키가 포함된다는 점이 다릅니다. (이전 Strict
예시에서 사용자가 cats.example
링크를 클릭하면 쿠키가 포함됩니다.) Set-Cookie
헤더에 SameSite
속성이 포함되지 않은 경우 기본값은 Lax
입니다.
없음
제약사항 없음: 쿠키는 크로스 사이트 여부와 관계없이 요청에 포함됩니다. SameSite=None
의 경우 쿠키에 Secure
속성도 있어야 합니다.
자세히 알아보기: SameSite 쿠키 설명
분할됨
👉 서드 파티 쿠키를 만드는 경우 여러 삽입에서 공유해야 한다는 것을 명시적으로 알고 있지 않는 한 기본적으로 Partitioned
속성을 포함해야 합니다.
이 속성을 사용하면 최상위 사이트마다 별도의 '쿠키 저장소'를 사용하여 분할된 스토리지에 쿠키를 선택할 수 있습니다. 쿠키는 최상위 사이트와 쿠키를 설정하는 도메인에 의해 이중 키로 설정됩니다.
예를 들어 웹사이트 A와 웹사이트 B에 모두 웹사이트 C의 iframe이 포함되어 있다고 가정해 보겠습니다. 웹사이트 A의 iframe에서 설정한 분할된 쿠키는 웹사이트 B의 iframe에서 액세스할 수 없습니다. AC 쿠키는 BC 쿠키와 별개입니다.
Partitioned
속성이 있는 쿠키는 CHIPS(Cookies Having Independent Partitioned State)라고 합니다.
파티션된 쿠키에는 Secure
속성이 있어야 합니다.
자세한 내용은 Cookies Having Independent Partitioned State를 참고하세요.
만료 및 최대 수명
👉 현재 세션보다 오래 지속되는 쿠키가 필요하지 않은 한 Max-Age
및 Expires
속성을 생략합니다. 브라우저에서 쿠키를 만료하므로 몇 년 후의 만료를 설정하는 것은 의미가 없습니다. 대신 사용자가 사이트를 다시 방문할 때 쿠키를 새로고침하는 것이 좋습니다.
쿠키를 삭제하고 더 이상 전송하지 않아야 하는 Expires
날짜 및 시간 또는 Max-Age
(초)을 지정할 수 있습니다. 예를 들면 다음과 같습니다.
Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
Set-Cookie:cat=tabby; Max-Age=86400
Max-Age
또는 Expires
속성을 지정하지 않으면 현재 세션이 종료될 때 쿠키가 삭제됩니다. 이러한 유형의 쿠키를 세션 쿠키라고도 합니다.
도메인
👉 하위 도메인 요청에 쿠키를 포함해야 하는 경우가 아니라면 Domain
속성을 포함하지 마세요.
Set-Cookie
헤더에 Domain
속성이 있는 경우 지정된 도메인 및 해당 하위 도메인에 대한 요청에 쿠키가 포함됩니다.
Set-Cookie
헤더에 Domain
속성이 없으면 쿠키가 하위 도메인 요청에 포함되지 않습니다.
즉, Domain
속성을 포함하면 도메인 제한이 줄어듭니다.
예를 들어 웹사이트 cats.example
의 응답은 다음과 같습니다.
Set-Cookie:cat=tabby
쿠키는cats.example
에 대한 요청에만 포함됩니다.Set-Cookie:cat=tabby; Domain=cats.example
쿠키는cats.example
요청과 함께 포함되며fluffy.cats.example
또는user.assets.cats.example
와 같은 하위 도메인의 리소스에 대한 요청에도 포함됩니다.
경로
👉 사이트의 모든 경로에 대한 요청에 쿠키를 포함해야 하는 경우 쿠키와 함께 Path=/
를 포함합니다. 보안 보호를 위해 Path
를 사용하지 마세요.
Path
속성이 Set-Cookie
응답 헤더에 포함된 경우 설정된 쿠키는 Path
값과 일치하는 쿠키를 설정하는 사이트의 URL 요청에만 포함됩니다.
예를 들면 다음과 같습니다.
Set-Cookie:cat=tabby; Path=/articles
/articles
로 시작하는 URL 경로에 대한 요청에 쿠키가 포함됩니다.
✅https://cats.example/articles/tabby/index.html
✅https://cats.example/articles/breeds/tabby/index.html
❎https://cats.example/images/tabby.jpg
❎https://cats.example/en/articles/tabby/index.html
Set-Cookie:cat=tabby; Path=/
사이트의 모든 URL에 대한 모든 요청에는 쿠키가 포함됩니다.
Set-Cookie
응답 헤더에 Path
값이 없으면 쿠키는 동일한 디렉터리에 대한 요청에만 포함됩니다. 예를 들어 cats.example/images/tabby.jpg.
요청에 대한 응답으로 cat=tabby
쿠키가 설정되었다고 가정해 보겠습니다. Path
가 설정되지 않은 경우 쿠키는 cats.example/images
디렉터리 내 파일 요청에만 포함됩니다.
데모
- 1pc.glitch.me: 퍼스트 파티 쿠키 데모
- 3pc.glitch.me: 서드 파티 쿠키 데모