У меня очень предварительное понимание заголовков, кеширования и керлингов в целом, не говоря уже о Cloudfront / S3 и что они делают - так что, извините, если в итоге это не имеет никакого смысла.
В настоящее время у нас есть скрипт Lambda Edge с originResponse для установки значений max-age для управления кэшем. Он использует переключатель с делами для типа контента, чтобы назначать различные значения на основе этого, и по умолчанию, если пропущены все дела.
Когда я пытаюсь использовать контент curl -I
, он вернется с ожидаемым максимальным возрастом, но при использовании curl -I --compressed
или просто проверке в браузере все будет показано вместо значения по умолчанию для коммутатора.
Мне кажется, я понимаю, что это связано со сжатием, но это так же, как и я, и я совершенно заблудился, как решить эту проблему иначе.
Заголовки запроса имеют accept-encoding: gzip, ...
, но ни у одного содержимого нет заголовка ответа content-encoding: gzip
. Я не знаю, будет ли Cloudfront автоматически устанавливать этот заголовок сам, если это уместно, и, если это так, может ли контент быть «сжат» в другом формате, кроме gzip? Будет ли отсутствие заголовка content-encoding
вызвать странность? Связано ли это даже с моей проблемой?
Прямо сейчас, я хочу еще раз извиниться за то, как мало смысла может иметь этот вопрос, есть несколько уровней того, как работает сайт, плюс я не уверен, где находится линия с NDA поверх моего собственная путаница.
Заголовок действительно мой вопрос вкратце. Я пытаюсь выяснить, как сделать так, чтобы при вызовах --compressed
показывался тот же максимальный возраст, что и без.
Редактировать : В настоящее время также существует проблема S3 (?), Присваивающей MIME-типам содержимого binary/octet-stream
таким вещам, как шрифты .woff2, над которыми я также работаю. Я не могу сказать, насколько связаны эти проблемы, и, может быть, переназначенные типы или реструктуризация объектов (если это так?) Вызывают сбой коммутатора. Тем не менее, типы контента в исходном вопросе показывают, что ожидается, поэтому я понятия не имею, почему он соответствует стандартному.
if (headers['content-type'] && undefined === headers['cache-control']) {
switch (headers['content-type'][0].value) {
case 'image/jpg':
setHeader('Cache-Control', 'public, max-age=2592000') // ← "curl -I" shows this
break
...
default:
setHeader('Cache-Control', 'public, max-age=3600') // ← "curl -I --compressed" shows this
break
Редактировать 2 : Я первоначально разместил этот вопрос на reddit , чтобы немного больше узнать о комментариях.