Установите Cache-Control в сегменте Google Cloud Storage

У меня есть корзина с общедоступными изображениями, которые часто обновляются, и я хотел бы отключить продолжительность кеширования по умолчанию, равную 3600. (например, «Cache-Control: private, max-age = 0, no-transform»)

Можно ли установить Cache-Control для файла при его загрузке с помощью PHP?

Есть ли способ установить Cache-Control по умолчанию для всех будущих файлов в корзине (например, с ACL, что все файлы являются общедоступными)?

Прямо сейчас я могу установить его Cache-Control только с помощью gsutil и только для файлов, находящихся в хранилище.


person Max Nilsson    schedule 20.08.2014    source источник
comment
Хотя это не задокументировано, вы можете установить Cache-Control через контекст потока, так же, как и с Content-Type (developers.google.com/appengine/docs/php/googlestorage/).   -  person Mars    schedule 21.08.2014
comment
@Mars Мне очень жаль, но я не могу заставить это работать с Cache-Control (однако он работает с Content-Type, как вы написали). Это было бы отличным решением.   -  person Max Nilsson    schedule 22.08.2014
comment
Не могли бы вы отправить запрос функции на code.google.com/ p / googleappengine / issues / list? q = Language% 3DPHP спасибо.   -  person Mars    schedule 22.08.2014


Ответы (2)


Вы можете установить Cache-Control при загрузке объекта - я предлагаю вам использовать gsutil -D, чтобы увидеть пример запроса, который он генерирует для этого, а затем перевести его в PHP:

gsutil -D -h Cache-Control:"Cache-Control:private, max-age=0, no-transform" \
    cp file gs://your-bucket/file

Невозможно установить Cache-Control по умолчанию для корзины.

person Mike Schwartz    schedule 20.08.2014
comment
Спасибо! Но я думаю, что в команде опечатка. Флаг -D заставил меня подумать, что единственное решение для установки Cache-Control на сервере (с PHP) - это запрос JSON PATCH к облачному хранилищу. - person Max Nilsson; 22.08.2014
comment
@ mike-schwartz Есть ли планы установить значение по умолчанию? Так же, как мы можем установить разрешения по умолчанию ... - person Jaap; 20.10.2015
comment
@Jaap - извините, в настоящее время нет планов добавить возможность установки Cache-Control по умолчанию. - person Mike Schwartz; 21.10.2015
comment
@ mike-schwartz, у меня возникли проблемы с указанием управления кешем во время загрузки с помощью подписанных URL. stackoverflow.com/questions/33223966/ - person Jaap; 21.10.2015
comment
К сожалению, я не знаком с библиотекой gcloud-node. Вы можете попробовать добавить тег gcloud-node к этому вопросу stackoverflow, чтобы кто-нибудь, более осведомленный об этой библиотеке, мог его увидеть. - person Mike Schwartz; 22.10.2015

Вот пример, который я создал после того, как нашел ваш вопрос. Ниже я хочу, чтобы загружаемый файл не кэшировался:

$this->bucket->upload(
  $content,
  [
    'name' => $name,
    'metadata' => [
      'cacheControl' => "public, max-age=0"
    ]
  ]
);

Я решил это:

  1. Переход к репо: https://github.com/googleapis/google-cloud-php-storage
  2. Это ведет к официальным документам: https://cloud.google.com/storage/docs
  3. Я нашел ссылку на PHP: https://googleapis.github.io/google-cloud-php/#/docs/google-cloud/v0.122.0/storage/storageclient
  4. В котором содержится upload ссылка на ведро: https://googleapis.github.io/google-cloud-php/#/docs/google-cloud/v0.122.0/storage/bucket?method=upload.
  5. Что рекомендует использовать справочник JSON API для метаданных https://cloud.google.com/storage/docs/json_api/v1/objects/insert#request-body
  6. Который ссылается на документ спецификации rfc для управления кешем https://tools.ietf.org/html/rfc7234#section-5.2

Все вышеперечисленное было полезными ресурсами, но, надеюсь, мой ответ будет более кратким для будущих гуглеров.

person Djave    schedule 25.03.2021
comment
Бум. Мгновенные обновления теперь с использованием 'cacheControl' => "public, max-age=0". Спасибо. - person John Erck; 03.06.2021