요약
- RFC 10025는 쿠키 생산자와 쿠키 소비자에게 의도적으로 서로 다른 의무를 부과합니다. 형식이 올바른
Set-Cookie행이라도 사용자 에이전트에 의해 무시되거나, 거부되거나, 정규화되거나, 교체되거나, 나중에 축출될 수 있습니다. - 저장은 전송이 아니며, 전송은 인가가 아닙니다. 유용한 수명 주기 영수증은 쿠키 비밀값을 기록하지 않으면서 발행된 필드, 사용자 에이전트의 수용·보존 판정, 요청별 선택 결과, 그리고 애플리케이션의 독립적인 보안 판정을 연결합니다.
평범한 인증 배포를 상상해 보십시오. 서비스는 세션 쿠키를 보내고 성공적인 응답을 기록합니다. 합성 클라이언트가 응답 상태와 정확한 헤더를 확인합니다. 운영팀은 배포 점검을 종료합니다. 몇 분 뒤, 실제 요청의 일부는 세션 식별자 없이 서비스에 도달하고, 또 다른 일부는 같은 이름의 쿠키 두 개를 실어 옵니다.
달콤한 진단은 네트워크가 상태를 잃었거나 브라우저가 지시를 위반했다는 것입니다. 그러나 그 결론은 관찰된 적이 없는 여러 의사결정 지점을 뛰어넘습니다. 한 사용자 에이전트는 필수 속성이 없는 쿠키를 거부할 수 있습니다. 다른 정책은 특정 서드파티 맥락에서 쿠키를 차단할 수 있습니다. 수용된 행은 오래된 행을 교체하거나, 조정된 시계 아래에서 만료되거나, 할당량 경쟁에서 밀리거나, 단순히 이후 요청의 도메인·경로·보안·same-site 범위 밖에 놓일 수 있습니다. 서버 로그는 자신이 보낸 것을 증명할 뿐, 상대편이 그것을 어떻게 처리했는지는 증명하지 않습니다.
이것이RFC 10025, 즉 2026년 7월RFC 6265를 대체하는 IETF 표준 트랙 문서가 노출하는 운영 경계입니다. 이 문서는Cookie와Set-Cookie필드를 정의하지만, 이들을 대칭적인 확인 응답으로 모델링하지 않습니다. 응답은 속성을 딸린 지시를 실어 오고, 이후 요청은 선택된 이름/값 쌍을 실어 옵니다. 그 사이에는 사용자 에이전트가 통제하는 상태 머신이 있습니다.
생산자는 절제를 약속하고, 소비자는 관용을 약속한다
RFC 10025는 쿠키를 만드는 구현과 쿠키를 소비하는 구현을 분리합니다. 생산자는 더 엄격하고 잘 동작하는 프로파일을 내보내야 합니다. 소비자는 설치된 서버 인구가 항상 바람직하게 동작하지 않기 때문에 더 관대한 문법을 수용해야 합니다. 이 비대칭은 상호운용성 전략이지 종단 간 확인 프로토콜이 아닙니다.
서버 측 적합성 테스트는 필드가 발행에 적합함을 입증할 수 있습니다. 그러나 소비 구현, 적용 중인 정책, 응답이 수신된 맥락, 그 결과로 정규화된 상태를 입증할 수는 없습니다. "쿠키를 받았다"는 표현조차 첫 단계에서 사용자 에이전트가 쿠키를 완전히 무시할 수 있게 허용하는 알고리즘의 시작입니다.
이 구분이 거버넌스에서 중요한 이유는 책임이 그렇지 않으면 흐려지기 때문입니다. 애플리케이션 팀은 지시를 소유합니다. 사용자 에이전트 또는 임베디드 런타임 팀은 파싱과 정책을 소유합니다. 기기 관리자나 사용자는 정책을 바꿀 수 있습니다. 이후의 내비게이션, 워커 또는 비-HTTP API가 요청 맥락을 제공합니다. 애플리케이션은 마침내 도착한 쿠키 문자열을 해석합니다. 녹색 표시기 하나가 이 모든 주체를 진실하게 대변할 수는 없습니다.
수용은 지시를 로컬 상태로 바꾼다
저장 알고리즘은 헤더를 무작정 복사하지 않습니다. 금지된 제어 문자를 포함하거나 지정된 크기 한도를 초과하는 이름/값 쌍을 거부합니다. 도메인과 경로, Secure와 HttpOnly, SameSite와 인식된 접두사에 대한 규칙을 적용합니다. 예를 들어Secure없는SameSite=None은 거부됩니다.__Secure-와__Host-같은 접두사는 자체 조건을 부과하며, 소비자는 생산자의 대소문자 습관을 신뢰하지 않고 접두사를 검사합니다.
수용된 쿠키는 구조화된 행이 됩니다: 이름, 값, 실효 만료, 도메인, 경로, 생성·최근 접근 시각, 그리고 persistent, host-only, secure-only, http-only, same-site 플래그입니다. 그 행은 서버가 상상한 텍스트와 실질적으로 다를 수 있습니다.Max-Age가Expires보다 우선합니다. 실효 수명은 상한을 가할 수 있습니다. Domain이 없으면 host-only 범위가 만들어집니다. 교체는 이름만이 아니라 이름, 도메인, 경로의 조합을 키로 삼습니다.
그래서 응답 행과 이후의 부재만 담은 추적은 불완전합니다. 그것은 잘못된 문법과 정책 거부, 접두사 실패와 범위 밖 도메인, 성공적 교체와 이전 행을 그대로 남긴 거부된 갱신을 구분할 수 없습니다.
만료는 상한이지 보관 약속이 아니다
만료 속성은 서버가 쿠키가 얼마나 오래 유효하기를 바라는지를 말합니다. 저장 공간을 예약하지 않습니다. RFC 10025는 사용자 에이전트가 구현 정의된 한도 내에서 수명을 조정하고 초과 쿠키를 제거할 수 있도록 허용합니다. 만료된 항목은 제거해야 하며, 할당량 압박으로 다른 항목이 제거될 수 있고, 최근 접근 시각이 우선순위에 영향을 줍니다. 사용자는 상태를 삭제할 수 있고, 개인정보 정책은 보존을 좁힐 수 있으며, 로컬 정의 세션의 종료는 비영속 행을 제거합니다.
실용적 귀결은 단순합니다. "다음 달에 만료된다"는 진술은 다음 달에도 세션이 존재할 것이라는 주장을 뒷받침할 수 없습니다. 또한 조기 부재 자체가 결함을 식별하지도 않습니다. 빠진 증거는 보존 이벤트입니다. 어떤 저장된 행이 사라졌는지, 언제, 어떤 로컬 규칙 아래에서, 그리고 그 이벤트가 만료, 교체, 명시적 삭제, 세션 종료, 할당량 축출, 광범위한 정책 정리 중 무엇이었는지입니다.
대부분의 공개 클라이언트는 그 수준의 세부 정보를 원격 사이트에 노출하지 않을 것이며, 관측 가능성이라는 명목으로 탐색 이력을 공개하도록 강제되어서도 안 됩니다. 그 통제는 주로 클라이언트나 통제된 런타임을 운영하는 당사자의 경계 안에 속합니다. 경계 간 보고는 쿠키 값이나 무관한 상태 목록이 아니라 대략적인 사유 분류, 집계된 비율 또는 동의된 진단을 사용해야 합니다.
저장된 쿠키도 매 검색마다 새 판정에 직면한다
RFC 10025의 검색 모델은 구체적인 URI, same-site 상태, 검색 유형을 평가합니다. 저장된 행은 만료되었거나, 호스트·도메인 범위를 벗어났거나, 경로 매칭에 실패했거나, 부재하는 보안 채널을 요구하거나, HttpOnly로 비-HTTP API에서 숨겨지거나, SameSite 처리로 보류되는 경우 제외됩니다. 사용자 에이전트는 자체 정책에 따라Cookie필드 자체를 생략할 수 있습니다.
Fetch 표준은 쿠키를 웹 플랫폼의 요청 기계에 통합하고 자격 증명으로 취급합니다.HTML의document.cookie인터페이스는 서로 다른 비-HTTP 검색 맥락입니다. 최상위 내비게이션, 중첩 문서, 워커, 스크립트 API는 따라서 "브라우저가 요청을 보냈다"는 하나의 라벨로 평탄화되어서는 안 됩니다. 개시자 체인과 검색 유형은 저장된 행을 바꾸지 않고도 선택 결과를 바꿀 수 있습니다.
SameSite는 과잉 주장의 위험을 보여줍니다. Strict, Lax, None, Default는 맥락 민감 알고리즘에 참여합니다. 호환성 처리는 최상위 요청에서, 다른 면으로는 안전하지 않은 메서드를 가진 최근 Default 쿠키를 수용할 수 있습니다. RFC는 SameSite를 완전한 CSRF 통제가 아닌 심층 방어로 기술하고, 그 속성을 사용자가 아니라 서버가 설정한다고 밝힙니다. 성공한 SameSite 테스트는 하나의 맥락과 하나의 정책 상태를 증명할 뿐, 보편적 동의나 안전을 증명하지 않습니다.
요청은 저장 설명을 되돌려 보내지 않는다
쿠키가 선택되면 요청은 보통 이름/값 쌍만을 실어 돌아옵니다. 저장된 Domain, Path, 생성 시각, SameSite 판정, 포함 사유는 돌려주지 않습니다. 여러 행이 도메인이나 경로가 다른 채로 정당하게 같은 이름을 공유할 수 있습니다. 서버는 직렬화 순서를 의미적 우선순위로 취급하지 말도록 권고받습니다.
이것이 두 번째 증거 공백을 만듭니다.SID=x를 본 서비스는 사용자 에이전트가 그 쌍을 이 요청에 붙였다는 것을 압니다. 그러나 어떤 원본Set-Cookie행이 그 행을 만들었는지, 이후 행이 교체했는지, 왜 선택되었는지, 또는 같은 이름의 다른 쌍이 애플리케이션 파서에 의해 버려졌는지는 알지 못합니다. HTTP/2와 HTTP/3는 또한 단일 쿠키 문자열을 여러 필드 행에 걸쳐 실을 수 있으며, 이는RFC 9113과RFC 9114에서 논의됩니다. 헤더 처리는 저장 이력을 발명하지 않으면서 프로토콜 의미를 보존해야 합니다.
수신 애플리케이션은 이어서 어떤 쿠키 속성도 결정할 수 없는 판단을 내립니다. 식별자가 살아 있는 세션에 대응하는가? 세션이 취소되었거나 회전되었는가? 인증된 주체가 이 메서드와 자원에 대한 권한이 있는가? 이 작업이 새로운 챌린지나 안티-CSRF 증명을 요구하는가? 쿠키는 문법적으로 유효하고 올바르게 선택되었으면서도 그 질문들 중 하나의 답이 '아니오'일 수 있습니다.
주변 권한은 양방향으로 과잉 주장을 위험하게 만든다
RFC 10025는 쿠키를 일종의 주변 권한(ambient authority)이라고 부릅니다. 사용자 에이전트는 쿠키 값을 모르는 당사자가 개시한 요청에 권한을 실은 상태를 붙일 수 있습니다. 그래서 세션 쿠키의 존재가 사용자 의도를 대신할 수 없습니다. URL은 자원을 지정하고, 자동으로 붙은 쿠키는 접근을 인가할 수 있으며, 공격자는 쿠키 값을 쥐지 않고도 전자에 영향을 줄 수 있습니다.
올바른 대응은 붙은 모든 쿠키를 악의적이라고 낙인찍는 것도, 하나의 속성이 문제를 해결한다고 주장하는 것도 아닙니다. 인증, 요청 출처, 안티-CSRF 통제, 자원 인가를 서로 다른 판정으로 유지하는 것입니다.RFC 9110은 더 넓은 HTTP 의미를 제공하지만, 애플리케이션 권한은 애플리케이션의 책임으로 남습니다.
이 분리는실행 중인 코드가 1차 증거라는 Lu Heng의 주장을 따릅니다. 구성 행이 중요하고, 발행된 바이트가 중요하고, 소비자의 실제 상태 전이가 중요하며, 최종 요청과 판정이 중요합니다.정책 거울은 어떤 층이 다른 층의 진실을 소유한다고 가장하지 않으면서 그 층들을 노출해야 합니다. BTW가옹호가 아닌 현실을 제품으로다루는 이유도 같습니다. 기록의 목적은 결정의 위치를 찾는 것이지, 수사로 한쪽이 준수한다고 선언하는 것이 아닙니다.
여섯 개의 연결된 판정을 담은 영수증
유용한 수명 주기 영수증은 발행에서 시작합니다. 응답 URL과 시각, 금지된 결합 전의 순서화된Set-Cookie필드 행, 이들을 산출한 릴리스 또는 구성 식별자, 비밀 값을 노출하지 않는 지문을 기록합니다.
수용 기록은 소비 런타임과 실효 정책 버전, 파서 결과, 수용된 지시 지문, 한정된 거부 분류를 추가합니다. 저장 기록은 정규화된 범위와 플래그, 실효 만료, 다른 행이 교체되었는지, 생성 시각이 어떻게 처리되었는지를 담습니다. 보존 기록은 그 사실이 로컬에서 관측 가능한 경우 만료, 삭제, 세션 종료, 교체 또는 축출을 보고합니다.
검색 기록은 하나의 요청을 URI, 메서드, 개시자 또는 최상위 맥락, 계산된 same-site 상태, 검색 유형, 포함되거나 보류된 행의 불투명 식별자에 결합합니다. 애플리케이션 기록은 이어서 파싱, 세션 조회, 인증, 명시적 인가, 최종 작업 결과를 기술합니다.
어떤 부분도 쿠키 값, 베어러 토큰 또는 세션 비밀을 로그에 복사해서는 안 됩니다. 식별자는 범위가 지정되고 회전되며 접근 통제되어야 하고, 클라이언트 측 세부 정보는 사용자가 공개에 동의하지 않는 한 적절한 관리 경계 안에 머물러야 합니다. 이 영수증은 여기서 제안하는 운영 모델이지, RFC 10025가 요구하는 텔레메트리 형식이 아닙니다.
그 이익은 진단적 정직함입니다. "헤더 발행됨"은 수용이 실패해도 참입니다. "저장됨"은 이후 요청이 범위 밖이어도 참입니다. "쿠키 첨부됨"은 세션이 만료되었어도 참입니다. "인증됨"은 인가가 작업을 거부해도 참입니다. 모든 층은 실제로 그것을 통제하는 주체가 정정할 수 있습니다.
출처
- RFC 10025 — Cookies: HTTP State Management Mechanism
- RFC 10025 발행 기록
- RFC 6265 — HTTP State Management Mechanism
- RFC 9110 — HTTP Semantics
- RFC 9113 — HTTP/2
- RFC 9114 — HTTP/3
- WHATWG Fetch 표준
- WHATWG HTML —
document.cookie - Public Suffix List
- Lu Heng — 왜 현실이지 옹호가 아니라, 제품으로서
- Lu Heng — Running Code Primary
- Lu Heng — 정책 거울
회원 브리핑
프로필 심층 컨텍스트
올바른 멤버십 등급으로 로그인하면 전체 브리핑과 출처 노트를 볼 수 있습니다.
Strategic Circle 전용
Strategic Circle
모든 독자에게 공개됩니다. 가입 후 로그인하면 프로필 브리핑를 열람할 수 있습니다.
Strategic Circle 가입하기Leadership Alliance 전용
Leadership Alliance
자격을 갖춘 IP 자산 소유자 및 운영진을 위한 콘텐츠입니다. 로그인하면 Leadership Alliance 브리핑을 열람할 수 있습니다.
Leadership Alliance 가입하기





