HTTP 헤더에 사용된 날짜/시간 형식
"Last-Modified" 및 "If-Modified-Since"와 같은 현대 HTTP 헤더에서 날짜/시간에 사용되는 형식과 그러한 형식에 따라 PHP에서 날짜/시간 문자열을 생성하는 방법을 설명하는 RFC는 무엇입니까?
일부 출처에서는 DateTime 클래스에 표시된 대로 RFC 2822를 사용하고 있습니다.D, d M Y H:i:s O
형식, 하지만 내 테스트에 따르면, 이 형식은 생산합니다.+0000
대신에GMT
마지막에다른 시간대 지정자를 사용해 보았지만 아무 것도 입력하지 않았습니다.GMT
마지막에, 내가 얻은 가장 가까운 결과는.UTC
그러나 Firebug에서 보여주었듯이, 모든 사이트는GMT
HTTP 헤더에 포함되어 있지 않습니다.+0000
또는UTC
.
그렇다면 실제로 사용되는 형식은 무엇이며 다른 사이트와 동일한 방식으로 날짜/시간 형식을 지정하는 방법은 무엇입니까?
여기에서 볼 수 있듯이 헤더에는 RFC2616 형식의 날짜 시간이 있습니다.
섹션에서 날짜 형식은 다음과 같습니다.
"Last-Modified" ":" HTTP-date
사용 예는 다음과 같습니다.
Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
RFC2616의 또 다른 인용문:
모든 HTTP 날짜/시간 스탬프는 예외 없이 그리니치 표준시(GMT)로 표시되어야 합니다.
PHP에서는 형식을 사용할 수 있습니다.D, d M Y H:i:s T
함수를 사용하는 경우gmdate()
이 명령은 항상 GMT 오프셋/시간대로 날짜 시간을 반환합니다.
echo gmdate('D, d M Y H:i:s T');
사용하려는 경우DateTime
확장명:
$dt = new DateTime('UTC');
#$dt = new DateTime('2013-01-01 12:00:00', new DateTimezone('UTC'));
echo $dt->format('D, d M Y H:i:s \G\M\T');
HTTP 1.1을 정의하는 RFC 2616을 살펴보겠습니다. https://www.rfc-editor.org/rfc/rfc2616#section-3.3
HTTP 응용 프로그램은 역사적으로 날짜/시간 스탬프의 표현을 위해 세 가지 다른 형식을 허용했습니다.
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
첫 번째 형식은 인터넷 표준으로 선호되며 RFC 1123 [8](RFC 822 [9]의 업데이트)에 의해 정의된 고정 길이 하위 집합을 나타냅니다.
(...)
모든 HTTP 날짜/시간 스탬프는 예외 없이 그리니치 표준시(GMT)로 표시되어야 합니다.
그렇게DateTime::COOKIE
또는Datetime::RFC850
올바른 형식을 사용합니다.RFC에 따르면 선호되는 것은 다음과 같습니다.D, d M Y H:i:s T
그것은 어떤 상수에 의해 정의되지 않습니다.DateTime
학급.
GMT를 사용하려면 다음 코드로 충분해야 합니다.
gmdate('D, d M Y H:i:s T');
여기서 (지금) 정답은 rfc7231 - 섹션 7.1.1.1 날짜/시간 형식을 지정하고 다음과 같은 위치에 있습니다.HTTP-date
의미론이 정의됩니다.
HTTP-date = IMF-fixdate / obs-date
또한 우리는 그것을 볼 수 있습니다.
보낸 사람이 HTTP-date로 정의된 타임스탬프를 하나 이상 포함하는 헤더 필드를 생성하는 경우 보낸 사람은 IMF-fixdate 형식으로 이러한 타임스탬프를 생성해야 합니다.
" 헤더를 보내는 - 은 "modern time HTTP"입니다.HTTP-date
은 형은다같습다니과음식과 .IMF-fixdate
서식을 정하다
그래서 실제 질문에 답하기 위해서입니다.
현대 HTTP 헤더에서 날짜/시간에 사용되는 형식을 설명하는 RFC
은 그은것의정합알니다아야의를당의 를 알아야 합니다.IMF-fixdate
rfc7231로 되어 .또한 다음과 같은 정의를 제공합니다.obs-date
i.e. 무rfc850-date
/asctime-date
IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT
; fixed length/zone/capitalization subset of the format
; see Section 3.3 of [RFC5322]
day-name = %x4D.6F.6E ; "Mon", case-sensitive
/ %x54.75.65 ; "Tue", case-sensitive
/ %x57.65.64 ; "Wed", case-sensitive
/ %x54.68.75 ; "Thu", case-sensitive
/ %x46.72.69 ; "Fri", case-sensitive
/ %x53.61.74 ; "Sat", case-sensitive
/ %x53.75.6E ; "Sun", case-sensitive
date1 = day SP month SP year
; e.g., 02 Jun 1982
day = 2DIGIT
month = %x4A.61.6E ; "Jan", case-sensitive
/ %x46.65.62 ; "Feb", case-sensitive
/ %x4D.61.72 ; "Mar", case-sensitive
/ %x41.70.72 ; "Apr", case-sensitive
/ %x4D.61.79 ; "May", case-sensitive
/ %x4A.75.6E ; "Jun", case-sensitive
/ %x4A.75.6C ; "Jul", case-sensitive
/ %x41.75.67 ; "Aug", case-sensitive
/ %x53.65.70 ; "Sep", case-sensitive
/ %x4F.63.74 ; "Oct", case-sensitive
/ %x4E.6F.76 ; "Nov", case-sensitive
/ %x44.65.63 ; "Dec", case-sensitive
year = 4DIGIT
GMT = %x47.4D.54 ; "GMT", case-sensitive
time-of-day = hour ":" minute ":" second
; 00:00:00 - 23:59:60 (leap second)
hour = 2DIGIT
minute = 2DIGIT
second = 2DIGIT
Obsolete formats:
obs-date = rfc850-date / asctime-date
rfc850-date = day-name-l "," SP date2 SP time-of-day SP GMT
date2 = day "-" month "-" 2DIGIT
; e.g., 02-Jun-82
day-name-l = %x4D.6F.6E.64.61.79 ; "Monday", case-sensitive
/ %x54.75.65.73.64.61.79 ; "Tuesday", case-sensitive
/ %x57.65.64.6E.65.73.64.61.79 ; "Wednesday", case-sensitive
/ %x54.68.75.72.73.64.61.79 ; "Thursday", case-sensitive
/ %x46.72.69.64.61.79 ; "Friday", case-sensitive
/ %x53.61.74.75.72.64.61.79 ; "Saturday", case-sensitive
/ %x53.75.6E.64.61.79 ; "Sunday", case-sensitive
asctime-date = day-name SP date3 SP time-of-day SP year
date3 = month SP ( 2DIGIT / ( SP 1DIGIT ))
; e.g., Jun 2
DateTime 확장 기능을 사용하면 RFC7231 HTTP/1.1 하이퍼텍스트 전송 프로토콜: 의미와 내용, 7.1.1장 날짜/시간 형식을 참조하는 RFC7231 상수를 사용할 수 있습니다.
$httpDate = $dateTime->format(DateTimeInterface::RFC7231);
은 실제로 있는 다른 된 것과 입니다.D, d M Y H:i:s \G\M\T
탄소를 통해:
Carbon::now()->setTimezone('GMT')->format("D, d M Y H:i:s T")
언급URL : https://stackoverflow.com/questions/21120882/the-date-time-format-used-in-http-headers
'programing' 카테고리의 다른 글
Chrome Extension 콘텐츠 스크립트에서 popup.html로 데이터를 보내는 방법 (0) | 2023.09.05 |
---|---|
일반 메서드에서 프로토콜 기본 구현 호출 (0) | 2023.09.05 |
Python 및 MySQLDB를 사용하여 mysql 데이터베이스에서 테이블 이름을 검색하는 방법은 무엇입니까? (0) | 2023.09.05 |
spring-boot에서 업데이트를 위해 select를 사용하는 방법 (0) | 2023.09.05 |
Android - 사용자 지정 글꼴 사용 (0) | 2023.09.05 |