Формат даты / времени, используемый в заголовках HTTP

Какой RFC описывает формат, используемый для даты / времени в современных HTTP-заголовках, например «Last-Modified» и «If-Modified-Since», и как создать строку даты / времени в PHP в соответствии с таким форматом?

Некоторые источники указывают на RFC 2822, который, как указано в классе DateTime , использует формат D, d MYH:i:s O , но из моих тестов этот формат создает +0000 вместо GMT в конце. Я пробовал другие спецификаторы часовых поясов, но ни один из них, похоже, не поставил GMT в конце, ближайший результат я получил с UTC . Однако, как показал Firebug, все сайты используют GMT в HTTP-заголовках, а не +0000 или UTC .

Итак, какой формат действительно используется и как мне форматировать дату / время так же, как и другие сайты?

    Как вы можете видеть здесь , заголовок Last-Modified имеет даты в формате RFC2616 .

    В разделе 14.29 Last-Modified вы можете видеть, что формат даты должен быть:

     "Last-Modified" ":" HTTP-date 

    Примером его использования является

     Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT 

    Еще одна цитата из RFC2616:

    Все отметки времени и времени HTTP ДОЛЖНЫ быть представлены в среднесрочное время по Гринвичу (GMT) без исключения.

    В PHP вы можете использовать формат D, d MYH:i:s T если вы используете функцию gmdate() которая всегда возвращает datetime в GMT offset / timeszone:

     echo gmdate('D, d MYH: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 MYH:i:s \G\M\T'); 

    Ну, давайте посмотрим на RFC 2616, который определяет HTTP 1.1: http://tools.ietf.org/html/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 MYH:i:s T который не определен какой-либо константой в классе DateTime .

    Чтобы убедиться, что GMT используется, достаточно следующего кода:

     gmdate('D, d MYH:i:s T');