🚀 Membuat Proxy Cloudinary dengan Cloudflare Workers + CORS Support
📌 Pendahuluan
Kalau kamu sering bekerja dengan Cloudinary untuk menyimpan dan mengelola gambar atau file statis, mungkin pernah mengalami masalah CORS (Cross-Origin Resource Sharing) saat mengakses file tersebut dari domain yang berbeda.
Salah satu solusi elegan untuk mengatasinya adalah dengan membuat proxy server menggunakan Cloudflare Workers.
Dengan cara ini:
·
File
tetap diambil dari Cloudinary.
·
CORS
sudah diatur langsung di Worker.
·
Bisa
tambahkan optimasi seperti cache untuk mempercepat
loading.
Artikel ini akan membahas cara membuat proxy Cloudinary dengan Cloudflare Workers menggunakan kode sederhana.
🎯 Tujuan Tutorial
Setelah membaca tutorial ini, kamu akan bisa:
1.
Membuat
Worker yang meneruskan request ke Cloudinary.
2. Mengatur CORS agar file bisa diakses dari domain mana saja.
3. Mengaktifkan cache jangka panjang agar lebih hemat bandwidth.
🛠️ Persiapan
Sebelum mulai, pastikan kamu punya:
- Akun
Cloudflare (gratis juga cukup).
- Akun
Cloudinary dan tahu base
URL milikmu, misalnya:
https://res.cloudinary.com/namapengguna
- Browser untuk mengetes hasilnya.
📜 Kode Lengkap
Berikut kode lengkap yang akan kita gunakan:
export default {
async fetch(request) {
const url = new URL(request.url);
const path = url.pathname;
const cloudinaryBase = "https://res.cloudinary.com/dtqlbsocv";
const targetUrl = `${cloudinaryBase}${path}`;
if (request.method === "OPTIONS") {
return new Response(null, {
status: 204,
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,HEAD,OPTIONS",
"Access-Control-Allow-Headers": "Content-Type, User-Agent"
}
});
}
const res = await fetch(targetUrl);
return new Response(res.body, {
status: res.status,
headers: {
"Content-Type": res.headers.get("Content-Type"),
"Access-Control-Allow-Origin": "*",
"Cache-Control": "public, max-age=31536000"
}
});
}
}
🔍 Penjelasan Kode
1️⃣ Menangkap URL Request
const url = new URL(request.url);
const path = url.pathname;
Bagian ini mengambil path dari URL yang diminta.
Misalnya request:
https://worker.example.com/images/logo.png
Maka path berisi:
/images/logo.png
2️⃣ Menentukan Base URL Cloudinary
const cloudinaryBase = "https://res.cloudinary.com/dtqlbsocv";
const targetUrl = `${cloudinaryBase}${path}`;
Kita menyimpan URL dasar Cloudinary, lalu menggabungkannya dengan path dari request.
Contoh:
·
Request
ke: /images/logo.png
·
Target
URL jadi:
https://res.cloudinary.com/dtqlbsocv/images/logo.png
3️⃣ Menangani Preflight CORS (OPTIONS)
if (request.method === "OPTIONS") {
return new Response(null, {
status: 204,
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,HEAD,OPTIONS",
"Access-Control-Allow-Headers": "Content-Type, User-Agent"
}
});
}
Sebelum mengirim GET, browser kadang mengirim request OPTIONS untuk memastikan server memperbolehkan cross-origin.
Di sini kita langsung membalas status 204 (No Content) dengan header CORS yang lengkap.
4️⃣ Mengambil File dari Cloudinary
const res = await fetch(targetUrl);
Di sinilah Worker mengambil file asli dari Cloudinary.
5️⃣ Mengirim Kembali ke Client
return new Response(res.body, {
status: res.status,
headers: {
"Content-Type": res.headers.get("Content-Type"),
"Access-Control-Allow-Origin": "*",
"Cache-Control": "public, max-age=31536000"
}
});
· Content-Type → Menjaga tipe file sesuai aslinya.
· Access-Control-Allow-Origin:→ Mengizinkan semua domain mengakses file.
· Cache-Control → Mengaktifkan cache 1 tahun untuk performa maksimal.
🖥️ Cara Men-deploy di Cloudflare Workers
1.
Login ke Cloudflare
Masuk ke dashboard Cloudflare.
2.
Buat Worker Baru
o
Pilih
menu Workers & Pages.
o
Klik Create
Application → Create Worker.
3.
Tempel Kode
Salin kode di atas dan tempel di editor Cloudflare Workers.
4.
Simpan dan Deploy
Klik Save and Deploy.
5.
Tes di Browser
Akses URL seperti:
https://nama-worker.example.workers.dev/path/file.jpg
File akan
diambil dari Cloudinary, tapi lewat proxy Worker.
🎯 Keuntungan Pendekatan Ini
✅ CORS
sudah beres tanpa perlu utak-atik di Cloudinary.
✅
Bisa custom header sesuai kebutuhan.
✅ Cache
panjang menghemat bandwidth dan mempercepat loading.
✅
Gratis kalau trafiknya masih kecil (Cloudflare Workers plan gratis punya kuota
harian).
⚡ Tips Lanjutan
·
Kamu
bisa menambahkan resize otomatis dengan memanfaatkan
parameter Cloudinary langsung di path.
·
Bisa
juga menambahkan proteksi token supaya hanya
pengguna tertentu yang bisa mengakses.
Penulis : Isbat Usman

