• 20-06-2025, 21:02:00
    #10
    moosy adlı üyeden alıntı: mesajı görüntüle
    bunun en doğru yolu ne olur hocam sizce?
    cloudflare workers var aslinda edgeden dönüyor buda çözebilir diye düşündüm

    sizce yol haritam nasıl olmali bu karmaşık işin içinden çıkamadım
    Workers'da request limiti var. Tüm sistemi workers yaparsanız üzer. Pages'de sadece build limiti var. Request limitsiz. Pages + dışarıdan json yapardım ben olsam. Json da bir Linux sunucuda nginx arkasında çalışır.
  • 20-06-2025, 21:34:21
    #11
    5 dolara workers limiti kalkıyor, en mantıklısı bana worker kullanmak gibi geliyor, anlık 100k istek kolay kolay cloud bir yapı olmadan stabil hizmet veremez.
  • 20-06-2025, 23:04:28
    #12
    victories adlı üyeden alıntı: mesajı görüntüle
    5 dolara workers limiti kalkıyor, en mantıklısı bana worker kullanmak gibi geliyor, anlık 100k istek kolay kolay cloud bir yapı olmadan stabil hizmet veremez.
    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));
    });
  • 21-06-2025, 00:58:28
    #13
    moosy adlı üyeden alıntı: mesajı görüntüle
    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));
    });
  • 21-06-2025, 02:21:08
    #14
    Sadece sitenin önüne CloudFlare getirseniz bile çözülebilir bu sorun.

    Benim JSON servis eden mimarimde şöyle bir istatistik vardı:



    Günlük 1 TB trafiğin 950+ GB'ını CF göğüslüyordu.

    DNS'i proxied olarak ekleyeceksiniz ve response'daki cache ayarını kendinize uygun şekilde ayarlayacaksınız bu kadar.
  • 23-06-2025, 21:20:42
    #15
    sigmundfreud adlı üyeden alıntı: mesajı görüntüle
    Sadece sitenin önüne CloudFlare getirseniz bile çözülebilir bu sorun.

    Benim JSON servis eden mimarimde şöyle bir istatistik vardı:



    Günlük 1 TB trafiğin 950+ GB'ını CF göğüslüyordu.

    DNS'i proxied olarak ekleyeceksiniz ve response'daki cache ayarını kendinize uygun şekilde ayarlayacaksınız bu kadar.
    workers kullanıyor musunuz
  • 23-06-2025, 21:26:08
    #16
    moosy adlı üyeden alıntı: mesajı görüntüle
    workers kullanıyor musunuz
    Bu mimaride Workers’a gerek duymadık.
  • 23-06-2025, 21:27:36
    #17
    sigmundfreud adlı üyeden alıntı: mesajı görüntüle
    Bu mimaride Workers’a gerek duymadık.
    hocam şimdi json dosyamız mevcut bu json dosyasını cloudflare cache üzerinden cacheleyip sadece proxiedi aktif halemi getirdiniz tam olarak?
    rahatsız ediyorsam kusura bakmayin gerçekten çok teşekkür ederim bilgilendirme için
  • 23-06-2025, 21:50:58
    #18
    Hocam aslında sizin probleminiz 40 dakikada çözülebilecek bir iş.

    Verileriniz kaç dakikada bir güncelleniyordu bu arada?