Dukungan untuk header respons HTTP

Halaman ini berlaku untuk Apigee dan Apigee hybrid.

Lihat dokumentasi Apigee Edge.

Topik ini menjelaskan cara Apigee menangani header caching HTTP/1.1 saat Anda menggunakan kebijakan ResponseCache. Apigee saat ini mendukung sebagian header dan perintah cache HTTP/1.1 (fitur yang tidak didukung tercantum dalam topik ini) yang diterima dari server target backend (asal).

Selain itu, dengan header tertentu, Apigee akan mengambil tindakan berdasarkan perintahnya. Dalam beberapa kasus, header cache HTTP/1.1 ini akan mengganti perilaku apa pun yang ditentukan dalam kebijakan ResponseCache. Misalnya, jika header Cache-Control ditampilkan dari server backend, Anda dapat membuat perintah s-maxage header berpotensi mengganti setelan masa berlaku lainnya dalam kebijakan.

Header Dukungan
Cache-Control Didukung pada respons yang ditampilkan dari server asal backend, tetapi tidak untuk permintaan klien. Apigee mendukung subset perintah.
Berakhir Didukung. Dapat diganti.
Tag Entitas (ETag) Perilaku spesifik untuk If-Match dan If-None-Match.
If-Modified-Since Pada permintaan GET, header diteruskan ke server asal meskipun entri cache yang valid ada.
Accept-Encoding Apigee mengirimkan respons yang dikompresi atau tidak dikompresi, bergantung pada header yang masuk.

Cache-Control

Apigee hanya mendukung header Cache-Control pada respons yang ditampilkan dari server origin backend (spesifikasi HTTP/1.1 mengizinkan header Cache-Control dalam permintaan klien dan respons server origin). Server origin dapat menyertakan endpoint target yang ditentukan di proxy API Apigee dan yang dibuat menggunakan panggilan API TargetServer.

Batasan dukungan Cache-Control

Apigee mendukung sebagian kemampuan header respons Cache-Control yang ditentukan dalam spesifikasi HTTP/1.1. Harap perhatikan hal berikut:

  • Apigee tidak mendukung header Cache-Control yang tiba dengan permintaan klien masuk.
  • Apigee hanya mendukung konsep cache publik. (Menurut spesifikasi HTTP, Cache-Control dapat bersifat publik (dibagikan) atau pribadi (satu pengguna).)
  • Apigee hanya mendukung sebagian perintah respons Cache-Control dalam spesifikasi HTTP/1.1. Lihat Dukungan untuk perintah header respons Cache-Control untuk mengetahui detailnya.

Dukungan untuk perintah header respons Cache-Control

Apigee mendukung perintah subset dari spesifikasi HTTP/1.1 pada respons dari server asal. Tabel berikut menjelaskan dukungan Apigee untuk perintah header respons HTTP Cache-Control.

Untuk informasi yang lebih mendetail tentang perintah yang tercantum di sini, lihat Cache-Control dalam spesifikasi HTTP/1.1.

Direktif Cache-Control Cara Apigee memproses perintah
cache-extension Tidak didukung.
max-age

Jika kebijakan ResponseCache Anda menetapkan elemen <UseResponseCacheHeaders> ke true, respons dapat di-cache selama jumlah detik yang ditentukan oleh perintah ini.

Perintah ini diganti oleh perintah s-maxage dan menggantikan header Expires. Elemen ini juga dapat diganti oleh elemen <ExpirySettings> kebijakan. Untuk mengetahui informasi selengkapnya, lihat "Menetapkan masa berlaku entri cache" dan <UseResponseCacheHeaders> di Kebijakan Cache Respons.

must-revalidate Tidak didukung. Semua entri cache dihapus oleh Apigee segera setelah masa berlakunya berakhir.
no-cache

Apigee meng-cache respons origin, tetapi harus divalidasi ulang dengan server origin sebelum digunakan untuk memenuhi permintaan klien berikutnya. Aturan ini memungkinkan origin menampilkan respons 304 Not Modified untuk menunjukkan bahwa respons harus ditampilkan dari cache, sehingga menghemat pemrosesan yang diperlukan untuk menampilkan seluruh respons. Jika server asal menampilkan respons lengkap, server akan mengganti entri cache yang ada. Setiap nama kolom yang ditentukan dengan perintah ini akan diabaikan.

no-store Tidak didukung.
no-transform Tidak didukung.
private Tidak didukung. Jika perintah ini diterima, respons origin tidak akan di-cache. Semua nama kolom akan diabaikan.
proxy-revalidate Tidak didukung. Semua entri cache dihapus oleh Apigee segera setelah masa berlakunya berakhir.
public Apigee meng-cache respons origin, meskipun jika perintah lain menunjukkan sebaliknya. Sesuai dengan spesifikasi HTTP/1.1, satu-satunya pengecualian untuk aturan ini adalah jika respons menyertakan header Otorisasi.
s-maxage

Jika kebijakan ResponseCache Anda menetapkan elemen <UseResponseCacheHeaders> ke true, respons dapat di-cache selama jumlah detik yang ditentukan oleh perintah ini.

Perintah ini menggantikan perintah max-age dan header Expires. Elemen ini dapat diganti oleh elemen <ExpirySettings> kebijakan. Untuk mengetahui informasi selengkapnya, lihat "Menetapkan masa berlaku entri cache" dan <UseResponseCacheHeaders> di Kebijakan Cache Respons.

Expires

Jika tanda UseResponseCacheHeaders dalam kebijakan ResponseCache disetel ke true, Apigee dapat menggunakan header Expires untuk menentukan time to live (TTL) entri yang di-cache. Header ini menentukan tanggal/waktu setelah entri cache respons dianggap tidak berlaku lagi. Header ini memungkinkan server memberikan sinyal kapan boleh menampilkan nilai yang di-cache berdasarkan stempel waktu.

Format tanggal yang dapat diterima untuk header Expires dijelaskan dalam spesifikasi HTTP/1.1. Contoh:

Berakhir: Kamis, 01 Desember 1994 pukul 16.00.00 GMT

Untuk mengetahui informasi mendetail tentang format tanggal/waktu HTTP, lihat Format Tanggal/Waktu dalam spesifikasi HTTP/1.1.

Untuk informasi selengkapnya tentang header Expires, lihat Definisi Kolom Header dalam spesifikasi HTTP/1.1.

ETag

Tag entity (ETag) adalah ID yang terkait dengan resource yang diminta. Dengan menggunakan ETag, server dapat menentukan apakah resource yang diminta dan resource yang di-cache terkait cocok. Misalnya, server dapat meng-cache ulang respons jika tidak cocok dengan yang saat ini di-cache. Metode ini dapat menampilkan resource yang di-cache jika ETag-nya cocok.

Saat endpoint target mengirimkan respons kembali ke Apigee dengan ETag, Apigee akan meng-cache ETag beserta respons.

Anda dapat membaca selengkapnya tentang Tag Entitas di Parameter Protokol dalam spesifikasi HTTP/1.1.

If-Match

Dengan header permintaan If-Match, entity yang di-cache adalah yang terbaru jika ETag dalam header cocok dengan ETag yang di-cache. Setiap permintaan selain GET yang menentukan header If-Match akan diteruskan ke server origin untuk memastikan bahwa setiap fasilitas penyimpanan dalam cache origin memiliki peluang untuk memproses permintaan.

Anda dapat membaca selengkapnya tentang If-Match di Header Field Definitions dalam spesifikasi HTTP/1.1.

Jika Apigee menerima permintaan GET masuk dari klien yang menyertakan header If-Match:

Jika Kemudian
Header If-Match menentukan satu atau beberapa ETag
  1. Apigee mengambil entri cache yang belum habis masa berlakunya untuk resource yang ditentukan dan membandingkan ETag yang kuat pada entri yang di-cache tersebut dengan yang ditentukan dalam header If-Match.
  2. Jika kecocokan ditemukan, entri cache akan ditampilkan.
  3. Jika tidak, permintaan akan diteruskan ke server origin.
Header If-Match menentukan "*" Permintaan diteruskan ke server origin untuk memastikan bahwa fasilitas cache origin memiliki kesempatan untuk memproses permintaan
Entri cache dengan URI permintaan yang sama ditemukan, tetapi hanya berisi ETag yang lemah Entri harus divalidasi ulang oleh server asal sebelum ditampilkan ke klien
ETag berasal dari server asal. ETag ditampilkan ke klien tanpa perubahan

If-None-Match

Dengan header If-None-Match, entity yang di-cache adalah yang terbaru jika ETag dalam header tidak cocok dengan ETag yang di-cache. Permintaan selain GET yang berisi header ini akan diteruskan ke server origin.

Jika Apigee menerima permintaan GET masuk dengan header ini:

Jika Kemudian
Header If-None-Match menentukan satu atau beberapa ETag
  1. Apigee mengambil entri cache yang belum habis masa berlakunya untuk URI yang ditentukan dan membandingkan ETag yang kuat pada entri yang di-cache tersebut dengan yang ditentukan dalam header If-None-Match.
  2. Jika kecocokan ditemukan, Apigee akan menampilkan status 304 Not Modified. Jika tidak ada kecocokan yang ditemukan, Apigee akan meneruskan permintaan ke server origin.

Header If-None-Match menentukan "*" dan entri yang di-cache untuk URI yang diminta masih ada

Apigee menampilkan status 304 Not Modified
Entri cache dengan URI permintaan yang sama ditemukan, tetapi hanya berisi ETag yang lemah Entri harus divalidasi ulang oleh server asal sebelum Apigee menampilkannya ke klien
Apigee menerima ETag dari server origin ETag ditampilkan ke klien tanpa perubahan

If-Modified-Since

Jika Apigee menerima header If-Modified-Since dalam permintaan GET, header tersebut akan diteruskan ke server asal meskipun ada entri cache yang valid.

Hal ini memastikan bahwa setiap update pada resource yang tidak melewati Apigee diperhitungkan. Jika server origin menampilkan entity baru, Apigee akan mengganti entri cache yang ada dengan nilai baru. Jika server menampilkan status 304 Not Modified, Apigee akan menampilkan nilai respons jika header Last-Modified respons yang di-cache menunjukkan bahwa respons tersebut belum berubah.

Terima Encoding

Jika permintaan masuk menyertakan header Accept-Encoding dengan nilai gzip, deflate, atau compress, server asal akan merespons dengan data yang dikompresi. Jika permintaan berikutnya datang tanpa header Accept-Encoding, permintaan tersebut mengharapkan respons yang tidak dikompresi. Mekanisme penyimpanan respons dalam cache Apigee dapat mengirim respons yang dikompresi dan tidak dikompresi, bergantung pada header yang masuk tanpa kembali ke server origin.

Anda dapat menambahkan nilai header Accept ke kunci cache agar kunci lebih bermakna untuk setiap item yang di-cache. Untuk mengetahui detail selengkapnya, lihat "Mengonfigurasi kunci cache" di Kebijakan Cache Respons.