성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] How can I tell whether two programs...
[정성태] The case of the fail-fast crashes c...
[정성태] Creating Docker multi-arch images f...
[정성태] BinaryFormatter removed from .NET 9...
[정성태] Extending the Windows Shell Progres...
[우광현] 와..... 범위를 잡았으니 클라이언트가 해당 범위를 확인해본다...
[정성태] 딱히, 그것 이상으로 더 설명할 내용이 없습니다. 동적 포...
[정성태] If Windows 3.11 required a 32-bit p...
[정성태] What is a hard error, and what make...
[괴물신인] 질문작성자인데 이 글을 이제봤네요 ㄷㄷ 이 글처럼 타입별로 인...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>HTTP Cookie의 expires 시간 형식(RFC7231)</h1> <p> 고객사에서 이전 제품의 환경에서는 HTTP Cookie의 expires 날짜가 다음과 같이 들어왔는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > test=1; expires=Fri 10-May-2019 02:00:00 GMT; path=/ </pre> <br /> 새로운 제품 환경에서는 다음과 같이 "콤마(,)"가 있다고 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > test=1; expires=Fri<span style='color: blue; font-weight: bold'>,</span> 10-May-2019 02:00:00 GMT; path=/ </pre> <br /> 희한한 현상이군요. ^^; 간단한 예제 웹 프로그램을 만들어 HttpCookie를 생성해 보면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > using System; using System.Web; using System.Web.UI; namespace WebApplication1 { public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { HttpCookie cookie = new HttpCookie("test", "1"); <span style='color: blue; font-weight: bold'>cookie.Expires = DateTime.UtcNow + TimeSpan.FromSeconds(5);</span> cookie.Path = "/"; this.Response.Cookies.Add(cookie); } } } </pre> <br /> 다음과 같이 시간 포맷에 콤마가 들어간 것을 볼 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Cache-Control: private Content-Length: 5035 Content-Type: text/html; charset=utf-8 <span style='color: blue; font-weight: bold'>Date: Fri, 10 May 2019 01:59:55 GMT</span> Server: Microsoft-IIS/10.0 Set-Cookie: test=1; <span style='color: blue; font-weight: bold'>expires=Fri, 10-May-2019 02:00:00 GMT; path=/</span> X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET X-SourceFiles: =?UTF-8?B?RTpcY2xvdWRfZHJpdmVcRHJvcGJveFxhcnRpY2xlc1xXZWJBcHBsaWNhdGlvbjFcV2ViQXBwbGljYXRpb24xXERlZmF1bHQ=?= </pre> <br /> 그뿐만 아니라 "Date" 헤더에도 약간 형식은 다르지만 콤마가 적용된 것을 볼 수 있습니다. 검색해 보면, 이에 대해 RFC7231 문서가 언급됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content - 7.1.1.1. Date/Time Formats ; <a target='tab' href='https://tools.ietf.org/html/rfc7231#section-7.1.1.1'>https://tools.ietf.org/html/rfc7231#section-7.1.1.1</a> </pre> <br /> 내용인즉 2가지 포맷이 있는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > HTTP-date = IMF-fixdate / obs-date </pre> <br /> IMF-fixdate 포맷이 바로 위에서 보았던 "Date" 헤더의 시간 형식입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Preferred format: IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT An example of the preferred format is Sun, 06 Nov 1994 08:49:37 GMT ; IMF-fixdate </pre> <br /> 반면 (obsolete로 취급되고 있는) obs-date 포맷은 2가지로 나뉘는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > obs-date = rfc850-date / asctime-date </pre> <br /> rfc850-date 형식도 역시 콤마를 포함하며 Cookie의 "expires"에 사용된 시간 형식입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > rfc850-date = day-name-l "," SP date2 SP time-of-day SP GMT Examples of the two rfc850-date format is Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 format </pre> <br /> 유일하게 asctime-date의 경우에만 콤마가 없는데요,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > asctime-date = day-name SP date3 SP time-of-day SP year Examples of the two rfc850-date format is Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format </pre> <br /> 이건 아예 형식 자체가 다릅니다. 따라서 고객사 측에서 제기한 "Sunday 06-Nov-94 08:49:37 GMT" 문자열이 어떻게 나온 것인지 잘 모르겠습니다. 덕분에 RFC 문서도 보며 정리하긴 했지만... ^^ 혹시 아시는 분 계시면 덧글 부탁드립니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1791
(왼쪽의 숫자를 입력해야 합니다.)