Глобализация, контроль кеша и HTTP-даты в браузерах

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

В настоящее время у меня есть что-то вроде этого кода для обработки запросов:

DateTime dt = getLastModified(someResourceHandle);
if(Request.Headers["If-Modified-Since"] == dt.ToString("R")/*RFC1123*/) { 
     // return HTTP 304 (Not Modified)
} else {
     getFullResource(someResourceHandle);
}

Цель: я не хочу, чтобы он сломался.

Итак, я проверил заголовки запросов из пары браузеров:

Когда я использую IE с английским языком в качестве языка:

Accept-Language: en-us
If-Modified-Since: Tue, 30 Jun 2009 15:52:19 GMT

Когда я использую IE с французским (Бельгия) в качестве моего языка (я бы ожидал «март» вместо «вт»):

Accept-Language: fr-be
If-Modified-Since: Tue, 30 Jun 2009 15:52:19 GMT

Несмотря ни на что, я получаю это от Firefox:

Accept-Language: en-us,en;q=0.5
If-Modified-Since: Tue, 30 Jun 2009 15:52:19 GMT

Это выглядит хорошо для меня, так как кажется, что все даты используют английские сокращения и единый формат (RFC 1123), но я не уверен, что это верно для всех основных браузеров и для всех глобализации и операционных систем (у меня есть доступ только для тестирования на компьютере с Windows).

Я делаю это правильно?


person Jeff Meatball Yang    schedule 30.06.2009    source источник


Ответы (1)


Да, это справедливо для всех браузеров. Это спецификация HTTP, которая устанавливает формат этого заголовка, и, насколько я знаю, все браузеры совместимы в этом случае.

На эти заголовки If-Modified-Since и Last-Modified не влияет Accept-Language (который относится к телу, а не к заголовкам).

person AnthonyWJones    schedule 30.06.2009