Как правильно установить заголовки Expires в Google Cloud Storage?

В Руководстве разработчика Google Cloud Storage объясняется, как устанавливать заголовки Cache-Control, и их критическое влияние на согласованное поведение api, однако заголовки Expires не упоминаются и не являются наследниками конфигурации Cache-Control.

Заголовок Expires всегда был равен времени запроса плюс 1 год, независимо от настройки Cache-Control, например.

$ gsutil setmeta -h "Cache-Control:300" gs://example-bucket/doc.html 

Был сделан запрос к документу (doc.html) в сегменте Google Cloud Storage (example-bucket) через

$ curl -I http://example-bucket.storage.googleapis.com/doc.html

который произвел следующие заголовки

HTTP/1.1 200 OK
Server: HTTP Upload Server Built on Oct 3 2012 16:52:30 (1349308350)
Date: Sat, 13 Oct 2012 00:51:13 GMT
Cache-Control: 300, no-transform
Expires: Sun, 13 Oct 2013 00:51:13 GMT
Last-Modified: Fri, 12 Oct 2012 20:08:41 GMT
ETag: "28fafe4213ae34c7d3ebf9ac5a6aade8"
x-goog-sequence-number: 82
x-goog-generation: 1347601001449082
x-goog-metageneration: 1
Content-Type: text/html
Accept-Ranges: bytes
Content-Length: 7069
Vary: Origin

person Alec Wenzowski    schedule 12.10.2012    source источник
comment
Похоже, что недавно могла быть ошибка (файлы загружены в апреле 2018 года), которая также вызвала заголовок Expires на год вперед: stackoverflow.com/questions/49708712/, прямой отчет для отслеживания проблем после входа в issueetracker.google.com/issues/77842189   -  person natevw    schedule 14.06.2018


Ответы (2)


Не уверен, почему вы говорите, что заголовок Expires показывает время запроса плюс 1 год. В вашем примере заголовок Expires показывает временную метку через час после даты запроса, чего и следовало ожидать.

Я только что провел эксперимент, в котором я установил максимальный возраст объекта 3600, а затем 7200 с помощью этой команды:

gsutil setmeta "Cache-Control:max-age=7200" gs://marc-us/xyz.txt

Затем я получил объект с помощью команды gsutil cat с параметром -D, чтобы увидеть детали запроса / ответа, например:

gsutil -D cat gs://marc-us/xyz.txt

В обоих экспериментах заголовок Expires выдавал ожидаемую временную метку в соответствии с настройкой максимального возраста объекта (то есть через час после времени запроса и через два часа после времени запроса).

person Marc Cohen    schedule 13.10.2012
comment
Спасибо за быстрый ответ. Я попробую это с помощью инструмента gsutil. Я использовал туман - person Alec Wenzowski; 13.10.2012
comment
Он определенно работает корректно с использованием API v2.0. Я использовал v1.0 api. Возможно ошибка вносится с библиотекой взаимодействия ... - person Alec Wenzowski; 13.10.2012
comment
Как истекает: вс, 13 октября 2013 г., не на год позже даты: сб, 13 октября 2012 г.? - person natevw; 14.06.2018

Похоже, это было вызвано неправильным заголовком. Ага.

Cache-Control: 300, no-transform

должно быть

Cache-Control: public, max-age=300, no-transform

Когда все настроено правильно, они работают. См. RFC 2616 (HTTP / 1.1), раздел 14.9 (Контроль кеширования).

person Alec Wenzowski    schedule 13.10.2012