Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
В этой теме описывается, как Edge обрабатывает заголовки кэширования HTTP/1.1 при использовании политики ResponseCache. Apigee Edge в настоящее время поддерживает подмножество заголовков и директив кэширования HTTP/1.1 (неподдерживаемые функции перечислены в этой теме), получаемых от целевых (исходных) серверов бэкэнда.
Кроме того, Edge предпринимает действия на основе определенных заголовков. В некоторых случаях эти заголовки кэширования HTTP/1.1 переопределяют поведение, указанное в политике ResponseCache. Например, если заголовок Cache-Control возвращается с бэкэнд-сервера, директива s-maxage этого заголовка может потенциально переопределить другие параметры истечения срока действия, указанные в политике.
| Заголовок | Поддерживать |
|---|---|
| Управление кэшем | Поддерживается для ответов, возвращаемых с серверных частей, но не для запросов клиентов. Edge поддерживает подмножество директив. |
| Срок действия истекает | Поддерживается. Может быть переопределено. |
| Теги сущностей (ETags) | Особые правила поведения для операторов If-Match и If-None-Match . |
| Если-Изменено-С | При выполнении GET-запросов заголовок передается на исходный сервер, даже если существует действительная запись в кэше. |
| Accept-Encoding | В зависимости от входящих заголовков Edge отправляет либо сжатые, либо несжатые ответы. |
Управление кэшем
Apigee Edge поддерживает заголовок Cache-Control только в ответах, возвращаемых с серверов-источников (спецификация HTTP/1.1 допускает заголовки Cache-Control как в запросах клиентов, так и в ответах серверов-источников). Серверы-источники могут включать как целевые конечные точки, определенные в прокси-сервере API Apigee Edge, так и созданные с помощью вызовов API TargetServer.
Ограничения поддержки управления кэшем
Apigee Edge поддерживает подмножество возможностей заголовка Cache-Control определенных в спецификации HTTP/1.1. Обратите внимание на следующее:
- Apigee Edge не поддерживает заголовки
Cache-Control, поступающие с входящими запросами клиентов. - Apigee Edge поддерживает только концепцию публичных кэшей. (Согласно спецификации HTTP,
Cache-Controlможет быть либо публичным (общим), либо приватным (для одного пользователя).) - Apigee Edge поддерживает только подмножество директив
Cache-Controlв ответах спецификации HTTP/1.1. Подробнее см. раздел «Поддержка директив заголовка ответа Cache-Control» .
Поддержка директив заголовка ответа Cache-Control
Apigee поддерживает подмножество директив из спецификации HTTP/1.1 в ответах от исходных серверов. В следующей таблице описана поддержка Apigee Edge директив заголовка HTTP Cache-Control.
Более подробную информацию о перечисленных здесь директивах см. в разделе Cache-Control в спецификации HTTP/1.1.
| Директива управления кэшем | Как Apigee Edge обрабатывает директиву |
cache-extension | Не поддерживается. |
max-age | Если в вашей политике ResponseCache элемент Эта директива переопределяется директивой |
must-revalidate | Не поддерживается. Все записи кэша удаляются Apigee Edge сразу после истечения срока их действия. |
no-cache | Edge кэширует ответ от источника, но перед использованием для обработки последующих запросов клиентов его необходимо повторно проверить на сервере-источнике. Это правило позволяет источнику возвращать ответ 304 Not Modified, чтобы указать, что ответ должен быть получен из кэша, тем самым экономя время, необходимое для возврата всего ответа. Если сервер-источник возвращает полный ответ, он заменяет существующую запись в кэше. Любые имена полей, указанные в этой директиве, игнорируются. |
no-store | Не поддерживается. |
no-transform | Не поддерживается. |
private | Не поддерживается. Если эта директива получена, ответ от источника не кэшируется. Имена полей игнорируются. |
proxy-revalidate | Не поддерживается. Все записи кэша удаляются Apigee Edge сразу после истечения срока их действия. |
public | Edge кэширует ответ от источника, даже если другие директивы указывают на обратное. Согласно спецификации HTTP/1.1, единственным исключением из этого правила является наличие в ответе заголовка Authorization. |
s-maxage | Если в вашей политике ResponseCache элемент Эта директива переопределяет директиву |
Срок действия истекает
Если флаг UseResponseCacheHeaders в политике ResponseCache установлен в true , Edge может использовать заголовок Expires для определения времени жизни (TTL) кэшированной записи. Этот заголовок указывает дату/время, по истечении которых запись в кэше ответа считается устаревшей. Этот заголовок позволяет серверам сигнализировать о том, когда можно возвращать кэшированное значение на основе временной метки.
Допустимые форматы даты для заголовка Expires описаны в спецификации HTTP/1.1. Например:
Срок действия истекает: Чт, 01 дек 1994 16:00:00 GMT
Подробную информацию о форматах даты/времени HTTP см. в разделе « Форматы даты/времени» спецификации HTTP/1.1.
Для получения дополнительной информации о заголовке Expires см. раздел «Определения полей заголовка» в спецификации HTTP/1.1.
ETag
Тег сущности (ETag) — это идентификатор, связанный с запрашиваемым ресурсом. Используя ETag, сервер может определить, совпадают ли запрашиваемый ресурс и связанный с ним кэшированный ресурс. Например, сервер может повторно кэшировать ответ, если он не совпадает с тем, что находится в текущем кэше. Он может вернуть кэшированный ресурс, если ETag совпадают.
Когда целевая конечная точка отправляет ответ в Edge с ETag, Edge кэширует ETag вместе с ответом.
Более подробную информацию о тегах сущностей в параметрах протокола можно найти в спецификации HTTP/1.1.
Если совпадение
С помощью заголовка запроса If-Match кэшированный объект считается актуальным, если ETag в заголовке совпадает с кэшированным ETag. Любые запросы, кроме GET, в которых указан заголовок If-Match передаются на исходный сервер, чтобы гарантировать, что средства кэширования исходного сервера смогут обработать запрос.
Более подробную информацию об If-Match можно найти в определениях полей заголовка в спецификации HTTP/1.1.
Если Edge получает входящий GET-запрос от клиента, содержащий заголовок If-Match :
| Если | Затем |
|---|---|
Заголовок If-Match указывает один или несколько ETags. |
|
В заголовке If-Match указано «*» | Запрос передается на исходный сервер, чтобы гарантировать, что все кэширующие средства исходного сервера смогут его обработать. |
| Обнаружена запись в кэше с тем же URI запроса, но она содержит только слабые ETags. | Перед возвратом клиенту запись должна быть повторно проверена исходным сервером. |
| Электронные теги (ETags) поступают с исходного сервера. | ETag возвращается клиенту без изменений. |
Если совпадений нет
С заголовком If-None-Match кэшированный объект считается актуальным, если ETag в заголовке не совпадает с кэшированным ETag. Запросы, отличные от GET, содержащие этот заголовок, передаются на исходный сервер.
Если Edge получает входящий GET-запрос со следующим заголовком:
| Если | Затем |
|---|---|
Заголовок If-None-Match указывает один или несколько ETags. |
|
Заголовок | Edge возвращает статус 304 "Не изменено". |
| Обнаружена запись в кэше с тем же URI запроса, но содержащая только слабые ETags. | Перед тем как Edge вернет запись клиенту, она должна быть повторно проверена исходным сервером. |
| Edge получает ETag от исходного сервера. | ETag возвращается клиенту без изменений. |
Если-Изменено-С
Если Apigee Edge получает заголовок If-Modified-Since в GET-запросе, он передается на исходный сервер, даже если существует действительная запись в кэше.
Это гарантирует, что любые обновления ресурса, не прошедшие через Apigee Edge, будут учтены. Если исходный сервер возвращает новый объект, Edge заменяет существующую запись в кэше новым значением. Если сервер возвращает статус 304 Not Modified, Edge возвращает значение ответа, если заголовок Last-Modified в кэшированном ответе указывает на то, что оно не изменилось.
Accept-Encoding
Когда входящий запрос содержит заголовок Accept-Encoding со значениями gzip , deflate или compress , исходный сервер отвечает сжатыми данными. При последующих запросах без заголовка Accept-Encoding ожидается несжатый ответ. Механизм кэширования ответов Apigee способен отправлять как сжатые, так и несжатые ответы в зависимости от входящих заголовков, не отправляя запрос обратно на исходный сервер.
Вы можете добавлять значения заголовка Accept к ключам кэша, чтобы сделать ключи более значимыми для каждого кэшированного элемента. Для получения более подробной информации см. раздел «Настройка ключа кэша» в политике кэширования ответов .