RFC: 2068
Оригинал: Hypertext Transfer Protocol - HTTP/1.1
Другие версии: RFC 2616
Категория: Предложенный стандарт
Дата публикации:
Авторы: , , , ,
Перевод: Алексей Симонов

3.3. Форматы даты/времени

3.3.1. Полная дата

HTTP приложения исторически допускали три различных формата для представления даты/времени:

Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, дополненный в RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, переписанный как RFC 1036
Sun Nov  6 08:49:37 1994       ; формат asctime() ANSI C

Первый формат выбран в качестве стандарта Интернета и представляет подмножество фиксированной длины, как определено в RFC 1123 (модифицированном RFC 822). Второй формат находится в общем пользовании, но основан на устаревшем и потерявшем статус стандарта RFC 850 [12], описывающем форматы дат, он обладает тем недостатком, что год указывается не в четырехразрядной нотации. Клиенты и серверы HTTP/1.1, которые анализируют значение даты, ДОЛЖНЫ понимать все три формата (для совместимости с HTTP/1.0), но генерировать для представления значений дат в полях заголовка HTTP ДОЛЖНЫ только формат RFC 1123.

Обратите внимание: Поощряется практика, при которой получатели значений дат здраво воспринимают значения дат, которые, возможно, посланы не HTTP приложениями, что имеет место при загрузке или регистрации сообщений через прокси-сервера/шлюзы к SMTP или NNTP.

Все без исключений форматы HTTP даты/времени ДОЛЖНЫ быть представлены в Greenwich Mean Time (GMT). В первых двух форматах данный факт указывается включением трехсимвольного сокращения "GMT" в качестве часового пояса. В asctime() формате это ДОЛЖНО подразумеваться при чтении.

HTTP-date    = rfc1123-date | rfc850-date | asctime-date

rfc1123-date = wkday "," SP date1 SP time SP "GMT"
rfc850-date  = weekday "," SP date2 SP time SP "GMT"
asctime-date = wkday SP date3 SP time SP 4DIGIT

date1        = 2DIGIT SP month SP 4DIGIT
               ; день месяц год (например 02 Jun 1982)

date2        = 2DIGIT "-" month "-" 2DIGIT
               ; день-месяц-год (напрмер 02-Jun-82)

date3        = month SP ( 2DIGIT | ( SP 1DIGIT ))
               ; месяц день (например, Jun  2)

time         = 2DIGIT ":" 2DIGIT ":" 2DIGIT
               ; 00:00:00 - 23:59:59

wkday        = "Mon" | "Tue" | "Wed"
             | "Thu" | "Fri" | "Sat" | "Sun"

weekday      = "Monday" | "Tuesday" | "Wednesday"
             | "Thursday" | "Friday" | "Saturday" | "Sunday"

month        = "Jan" | "Feb" | "Mar" | "Apr"
             | "May" | "Jun" | "Jul" | "Aug"
             | "Sep" | "Oct" | "Nov" | "Dec"

Обратите внимание: Эти требования — это требования к для форматам даты/времени, которые применяются внутри потока протокола HTTP. Клиентам и серверам не требуется использовать эти форматы для представления пользователю, регистрации запросов и т.д.

3.3.2. Разность секунд (delta seconds)

Некоторые поля HTTP заголовка позволяют указывать значения времени в виде целого числа секунд, представленного в десятичной форме, которые должны пройти с того момента, как сообщение было получено.

       delta-seconds  = 1*DIGIT
2007 - 2017 © Русские переводы RFC, IETF, ISOC.