hocam sizi buralarda görmek çok güzel

streaming konusunda eski yorumlarınızı cok okumuştum.
workers kullanıyorum 5 dolara mesala şu şekilde javascript kodu kullansam yeterli olurmu hocam
function translateResponseHeaders(originalHeaders) {
const newHeaders = new Headers(originalHeaders);
// Zararlı veya CORS'u bozan header'lar silinirs
newHeaders.delete("set-cookie");
newHeaders.delete("Set-Cookie");
// CORS ayarları
newHeaders.set("Access-Control-Allow-Origin", "*");
newHeaders.set("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS");
newHeaders.set("Access-Control-Allow-Headers", "*");
// 2 dakika cache süresi (hem edge cache hem de tarayıcı için)
newHeaders.set("Cache-Control", "public, max-age=120, s-maxage=120, stale-while-revalidate=30");
return newHeaders;
}
async function handleRequest(request) {
const cache = caches.default;
const cacheKey = new Request(request.url, request);
// Cache kontrolü
const cachedResponse = await cache.match(cacheKey);
if (cachedResponse) {
return cachedResponse;
}
// URL oluştur
const parsedUrl = new URL(request.url);
const path = parsedUrl.pathname.replace("/stream", "");
const search = parsedUrl.search;
const targetUrl = "https://www.siteadi.com/match.json" + path + search;
// Orijinal içeriği fetch et
const originResponse = await fetch(targetUrl);
// Yeni response hazırla
const response = new Response(originResponse.body, {
status: originResponse.status,
headers: translateResponseHeaders(originResponse.headers),
});
// Edge cache'e yaz
await cache.put(cacheKey, response.clone());
return response;
}
addEventListener("fetch", event => {
event.respondWith(handleRequest(event.request));
});
Artık pek fırsatım olmuyor foruma girmeye, zaten birşeyler soran da yok pek, herkes birşeyler satmak derdinde
CORS ile "GET, HEAD, OPTIONS" metotlarını belirtmiş ancak gerçekten bunlar harici istekleri engellememişsin,
async function handleRequest(request) {
// Sadece desteklenen metodlara izin ver
if (!["GET", "HEAD", "OPTIONS"].includes(request.method)) {
return new Response("Method not allowed", {
status: 405,
headers: { "Allow": "GET, HEAD, OPTIONS" }
});
}Gibi kesin olarak harici istekleri engelleyebilirsin.
ayrıca cloudflare de önbellek tutuyor onun içinde şu şekilde
bkz
https://developers.cloudflare.com/wo...e-using-fetch/ // Orijinal içeriği fetch et
const originResponse = await fetch(targetUrl, {
cf: {
cacheTtl: 120, // Cloudflare'in kendi önbelleği için tam 2 dakika
cacheEverything: true
}mümkün mertebe try catch kullan, ayrıca sen istek başarılı olmasada önbelleğe yazdırıp 2 dk boyunca kullanıyorsun, sadece başarılı isteklerin önbelleğe yazılması lazım.
if (!originResponse.ok) {
return new Response(`Hedef sunucu hatası: ${originResponse.status}`, {
status: originResponse.status
});
}if (originResponse.ok) {
await cache.put(cacheKey, response.clone());
}Böyle parça parça karışık oldu, toparlarsak şöyle
function translateResponseHeaders(originalHeaders) {
const newHeaders = new Headers(originalHeaders);
// Zararlı veya CORS'u bozan header'lar silinir
newHeaders.delete("set-cookie");
newHeaders.delete("Set-Cookie");
// CORS ayarları
newHeaders.set("Access-Control-Allow-Origin", "*");
newHeaders.set("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS");
newHeaders.set("Access-Control-Allow-Headers", "*");
// 2 dakika cache süresi (hem edge cache hem de tarayıcı için)
newHeaders.set("Cache-Control", "public, max-age=120, s-maxage=120, stale-while-revalidate=30");
return newHeaders;
}
async function handleRequest(request) {
// Metod kontrolü - sadece desteklenen metodlara izin ver
if (!["GET", "HEAD", "OPTIONS"].includes(request.method)) {
return new Response("Method not allowed", {
status: 405,
headers: { "Allow": "GET, HEAD, OPTIONS" }
});
}
// OPTIONS isteği için hızlı yanıt
if (request.method === "OPTIONS") {
return new Response(null, {
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, HEAD, OPTIONS",
"Access-Control-Allow-Headers": "*"
}
});
}
// Önbellek kontrolü
const cache = caches.default;
const cacheKey = new Request(request.url, request);
const cachedResponse = await cache.match(cacheKey);
if (cachedResponse) {
return cachedResponse;
}
// URL oluştur
const parsedUrl = new URL(request.url);
const path = parsedUrl.pathname.replace("/stream", "");
const search = parsedUrl.search;
const targetUrl = "https://www.siteadi.com/match.json" + path + search;
try {
// Orijinal içeriği fetch et - cf parametresi eklendi
const originResponse = await fetch(targetUrl, {
cf: {
cacheTtl: 120, // 2 dakika
cacheEverything: true
}
});
// Başarısız yanıtlar için işleme
if (!originResponse.ok) {
return new Response(`Hedef sunucu hatası: ${originResponse.status}`, {
status: originResponse.status
});
}
// Yeni response hazırla
const response = new Response(originResponse.body, {
status: originResponse.status,
headers: translateResponseHeaders(originResponse.headers)
});
// Yalnızca başarılı yanıtları önbelleğe yaz
if (originResponse.ok) {
await cache.put(cacheKey, response.clone());
}
return response;
} catch (error) {
return new Response(`Bağlantı hatası: ${error.message}`, {
status: 502,
headers: {
"Content-Type": "text/plain;charset=UTF-8"
}
});
}
}
addEventListener("fetch", event => {
event.respondWith(handleRequest(event.request));
});