{"id":13351,"date":"2026-11-05T16:00:46","date_gmt":"2026-11-05T13:00:46","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/?p=13351"},"modified":"2026-11-05T06:57:23","modified_gmt":"2026-11-05T03:57:23","slug":"http-range-indirme-devam-ettirme","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/http-range-indirme-devam-ettirme\/","title":{"rendered":"Kesilen \u0130ndirme Ba\u015ftan Ba\u015fl\u0131yor: HTTP Range Kontrol\u00fc"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><div class=\"aiw-summary\">\n<p class=\"aiw-box-title\">H\u0131zl\u0131 \u00f6zet<\/p>\n<p>Kesilen indirme ba\u015ftan ba\u015fl\u0131yorsa sunucu, dosyan\u0131n yaln\u0131zca kalan b\u00f6l\u00fcm\u00fcn\u00fc isteyen iste\u011fe uygun yan\u0131t vermiyor olabilir. HTTP Range, dosyan\u0131n belirli bir bayt aral\u0131\u011f\u0131n\u0131 istemenizi sa\u011flar; bayt, dosya boyutunu \u00f6l\u00e7en veri birimidir. \u0130ndirmeyi s\u00fcrd\u00fcrme deste\u011fini kontrol etmek i\u00e7in k\u00fc\u00e7\u00fck bir aral\u0131k isteyip gelen yan\u0131t\u0131 inceleyin.<\/p>\n<ul>\n<li><code>206 Partial Content<\/code>, istenen b\u00f6l\u00fcm\u00fcn k\u0131smi yan\u0131t olarak g\u00f6nderildi\u011fini belirtir.<\/li>\n<li><code>Content-Range<\/code>, yan\u0131t\u0131n dosyan\u0131n hangi baytlar\u0131n\u0131 i\u00e7erdi\u011fini g\u00f6sterir. Bu bilgiyi yan\u0131t g\u00f6vdesinin, yani g\u00f6nderilen dosya verisinin boyutuyla birlikte kontrol edin.<\/li>\n<li><code>Accept-Ranges<\/code> ba\u015fl\u0131\u011f\u0131 tek ba\u015f\u0131na indirmeyi s\u00fcrd\u00fcrebilece\u011finizi kan\u0131tlamaz.<\/li>\n<li>Dosyan\u0131n de\u011fi\u015fmesi, indirme ba\u011flant\u0131s\u0131n\u0131n ge\u00e7erlilik s\u00fcresinin dolmas\u0131 veya aradaki \u00f6nbellek katman\u0131 devam iste\u011fini etkileyebilir.<\/li>\n<\/ul>\n<\/div>\n<p>B\u00fcy\u00fck bir ZIP dosyas\u0131 ya da dijital \u00fcr\u00fcn indirirken ba\u011flant\u0131 kesildi\u011finde, ayn\u0131 veriyi tekrar indirmek zaman ve veri t\u00fcketir. Sorun her zaman taray\u0131c\u0131da de\u011fildir: Dosyay\u0131 sunan uygulama veya iste\u011fi sunucuya ileten ara katman da indirmeyi ba\u015fa d\u00f6nd\u00fcrebilir.<\/p>\n<p>Kontrole, canl\u0131 sitenizi de\u011fi\u015ftirmeden ayr\u0131 bir Ubuntu test sunucusunda ba\u015flayacaks\u0131n\u0131z. \u00d6nce dosyan\u0131n k\u00fc\u00e7\u00fck bir b\u00f6l\u00fcm\u00fcn\u00fc alacak, ard\u0131ndan indirmeyi kald\u0131\u011f\u0131 yerden s\u00fcrd\u00fcrecek ve tamamlanan dosyan\u0131n kaynakla ayn\u0131 oldu\u011funu kontrol edeceksiniz. Bu \u00f6rnek, kendi sitenizdeki indirme yolunun \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 tek ba\u015f\u0131na kan\u0131tlamaz; ancak sorunun dosya sunumunda m\u0131, uygulamada m\u0131, yoksa aradaki katmanda m\u0131 oldu\u011funu ay\u0131rmak i\u00e7in kullanabilece\u011finiz bir kontrol yolu sunar.<\/p>\n<div id=\"toc_container\" role=\"navigation\" aria-label=\"Table of Contents\" data-nosnippet class=\"toc_transparent no_bullets toc_numbered toc_title_center\"><p class=\"toc_title\">\u0130\u00e7indekiler<\/p><ul class=\"toc_list\"><li><a href=\"#Indirme_neden_basa_doner_HTTP_Range_neyi_degistirir\"><span class=\"toc_number toc_depth_1\">1.<\/span> \u0130ndirme neden ba\u015fa d\u00f6ner, HTTP Range neyi de\u011fi\u015ftirir?<\/a><ul><li><a href=\"#206_200_ve_416_yanitlari_ne_anlatir\"><span class=\"toc_number toc_depth_2\">1.1.<\/span> 206, 200 ve 416 yan\u0131tlar\u0131 ne anlat\u0131r?<\/a><\/li><li><a href=\"#Accept-Ranges_neden_tek_basina_yeterli_degildir\"><span class=\"toc_number toc_depth_2\">1.2.<\/span> Accept-Ranges neden tek ba\u015f\u0131na yeterli de\u011fildir?<\/a><\/li><\/ul><\/li><li><a href=\"#Ornek_ortami_kurun_ve_kismi_yaniti_dogrulayin\"><span class=\"toc_number toc_depth_1\">2.<\/span> \u00d6rnek ortam\u0131 kurun ve k\u0131smi yan\u0131t\u0131 do\u011frulay\u0131n<\/a><ul><li><a href=\"#Nginx8217i_kurun_ve_test_dosyasini_olusturun\"><span class=\"toc_number toc_depth_2\">2.1.<\/span> Nginx&#8217;i kurun ve test dosyas\u0131n\u0131 olu\u015fturun<\/a><\/li><li><a href=\"#Yerel_dosya_sunucusunu_ayarlayin\"><span class=\"toc_number toc_depth_2\">2.2.<\/span> Yerel dosya sunucusunu ayarlay\u0131n<\/a><\/li><li><a href=\"#Ilk_1024_bayti_GET_istegiyle_dogrulayin\"><span class=\"toc_number toc_depth_2\">2.3.<\/span> \u0130lk 1024 bayt\u0131 GET iste\u011fiyle do\u011frulay\u0131n<\/a><\/li><\/ul><\/li><li><a href=\"#Kalan_baytlari_indirin_ve_dosya_butunlugunu_kontrol_edin\"><span class=\"toc_number toc_depth_1\">3.<\/span> Kalan baytlar\u0131 indirin ve dosya b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc kontrol edin<\/a><ul><li><a href=\"#Ilk_parcayi_kaydedip_ayni_dosyaya_devam_edin\"><span class=\"toc_number toc_depth_2\">3.1.<\/span> \u0130lk par\u00e7ay\u0131 kaydedip ayn\u0131 dosyaya devam edin<\/a><\/li><li><a href=\"#Surum_uyusmazligini_guvenli_bicimde_sinayin\"><span class=\"toc_number toc_depth_2\">3.2.<\/span> S\u00fcr\u00fcm uyu\u015fmazl\u0131\u011f\u0131n\u0131 g\u00fcvenli bi\u00e7imde s\u0131nay\u0131n<\/a><\/li><li><a href=\"#Dosya_sinirini_asan_istegi_kontrol_edin\"><span class=\"toc_number toc_depth_2\">3.3.<\/span> Dosya s\u0131n\u0131r\u0131n\u0131 a\u015fan iste\u011fi kontrol edin<\/a><\/li><\/ul><\/li><li><a href=\"#Proxy_CDN_ve_uygulama_katmaninda_sorunu_ayirin\"><span class=\"toc_number toc_depth_1\">4.<\/span> Proxy, CDN ve uygulama katman\u0131nda sorunu ay\u0131r\u0131n<\/a><ul><li><a href=\"#Kaynak_sunucuyla_dis_uctan_ayni_parcayi_isteyin\"><span class=\"toc_number toc_depth_2\">4.1.<\/span> Kaynak sunucuyla d\u0131\u015f u\u00e7tan ayn\u0131 par\u00e7ay\u0131 isteyin<\/a><\/li><li><a href=\"#Baslik_onbellek_ve_sikistirma_farkini_daraltin\"><span class=\"toc_number toc_depth_2\">4.2.<\/span> Ba\u015fl\u0131k, \u00f6nbellek ve s\u0131k\u0131\u015ft\u0131rma fark\u0131n\u0131 daralt\u0131n<\/a><\/li><li><a href=\"#PHP_ve_sureli_baglantilari_ayri_kontrol_edin\"><span class=\"toc_number toc_depth_2\">4.3.<\/span> PHP ve s\u00fcreli ba\u011flant\u0131lar\u0131 ayr\u0131 kontrol edin<\/a><\/li><\/ul><\/li><li><a href=\"#Sik_Sorulan_Sorular\"><span class=\"toc_number toc_depth_1\">5.<\/span> S\u0131k Sorulan Sorular<\/a><ul><li><a href=\"#Indirmeyi_surdurebilmek_icin_HTTP3_gerekli_mi\"><span class=\"toc_number toc_depth_2\">5.1.<\/span> \u0130ndirmeyi s\u00fcrd\u00fcrebilmek i\u00e7in HTTP\/3 gerekli mi?<\/a><\/li><li><a href=\"#Sunucu_destekliyorsa_her_tarayici_indirmeye_devam_eder_mi\"><span class=\"toc_number toc_depth_2\">5.2.<\/span> Sunucu destekliyorsa her taray\u0131c\u0131 indirmeye devam eder mi?<\/a><\/li><li><a href=\"#Paralel_indirme_her_zaman_daha_hizli_mi\"><span class=\"toc_number toc_depth_2\">5.3.<\/span> Paralel indirme her zaman daha h\u0131zl\u0131 m\u0131?<\/a><\/li><li><a href=\"#Range_istegi_ucretli_dosyanin_erisim_iznini_asabilir_mi\"><span class=\"toc_number toc_depth_2\">5.4.<\/span> Range iste\u011fi \u00fccretli dosyan\u0131n eri\u015fim iznini a\u015fabilir mi?<\/a><\/li><\/ul><\/li><li><a href=\"#Yayina_almadan_once_son_kontrol_listesi\"><span class=\"toc_number toc_depth_1\">6.<\/span> Yay\u0131na almadan \u00f6nce son kontrol listesi<\/a><\/li><\/ul><\/div>\n<h2><span id=\"Indirme_neden_basa_doner_HTTP_Range_neyi_degistirir\">\u0130ndirme neden ba\u015fa d\u00f6ner, HTTP Range neyi de\u011fi\u015ftirir?<\/span><\/h2>\n<p>Bir ZIP dosyas\u0131n\u0131n indirmesi kesildi\u011finde, o ana kadar indirilen b\u00f6l\u00fcm bilgisayar\u0131n\u0131zda duruyor olabilir. Buna ra\u011fmen indirme s\u0131f\u0131rdan ba\u015flayabilir: \u0130ndirmeyi yapan uygulama kalan b\u00f6l\u00fcm\u00fc istemiyor veya sunucu bu iste\u011fe dosyan\u0131n tamam\u0131yla yan\u0131t veriyor olabilir. Nedeni ay\u0131rmak i\u00e7in yaln\u0131z indirme \u00e7ubu\u011funa de\u011fil, g\u00f6nderilen iste\u011fe ve d\u00f6nen yan\u0131ta bakman\u0131z gerekir.<\/p>\n<p><strong>HTTP Range ile indirmeye devam etme<\/strong>, dosyan\u0131n tamam\u0131 yerine belirli bir bayt aral\u0131\u011f\u0131n\u0131 istemeye dayan\u0131r. Bayt, dosya boyutunu \u00f6l\u00e7mekte kullan\u0131lan veri birimidir. \u0130stemci, yani indirmeyi yapan taray\u0131c\u0131 veya program, elindeki par\u00e7an\u0131n ard\u0131ndan gelen baytlar\u0131 isteyebilir. Bunun g\u00fcvenli \u00e7al\u0131\u015fmas\u0131 i\u00e7in bilgisayar\u0131n\u0131zdaki par\u00e7an\u0131n korunmas\u0131, sunucunun ayn\u0131 dosya s\u00fcr\u00fcm\u00fcn\u00fc sunmas\u0131 ve aral\u0131k iste\u011fini do\u011fru kar\u015f\u0131lamas\u0131 gerekir.<\/p>\n<h3><span id=\"206_200_ve_416_yanitlari_ne_anlatir\">206, 200 ve 416 yan\u0131tlar\u0131 ne anlat\u0131r?<\/span><\/h3>\n<p>\u0130stek i\u00e7indeki <code>Range<\/code> ba\u015fl\u0131\u011f\u0131, al\u0131nmak istenen aral\u0131\u011f\u0131 belirtir. \u00d6rne\u011fin <code>Range: bytes=0-1023<\/code>, dosyan\u0131n ilk 1024 bayt\u0131n\u0131 ister. Konumlar s\u0131f\u0131rdan ba\u015flar ve aral\u0131\u011f\u0131n iki ucu da dahildir. Sunucu bu tek aral\u0131k iste\u011fini kar\u015f\u0131l\u0131yorsa <code>206 Partial Content<\/code>, yani k\u0131smi i\u00e7erik yan\u0131t\u0131 verir.<\/p>\n<p><code>Content-Range<\/code> yan\u0131t ba\u015fl\u0131\u011f\u0131, g\u00f6nderilen b\u00f6l\u00fcm\u00fcn dosyadaki yerini ve toplam boyutu g\u00f6sterir. \u00d6rne\u011fin 8388608 baytl\u0131k bir dosyan\u0131n ilk 1024 bayt\u0131n\u0131 istedi\u011finizde <code>Content-Range: bytes 0-1023\/8388608<\/code> beklenir. Yan\u0131t g\u00f6vdesi, yani ba\u015fl\u0131klardan sonra ta\u015f\u0131nan dosya verisi, bu durumda 1024 bayt olmal\u0131d\u0131r. <strong>206 kodunu, aral\u0131k bilgisini ve gelen veri boyutunu birlikte kontrol edin.<\/strong> B\u00f6ylece yaln\u0131z sunucunun destek bildirimine g\u00fcvenmez, ger\u00e7ekten istedi\u011finiz par\u00e7an\u0131n d\u00f6nd\u00fc\u011f\u00fcn\u00fc kontrol edersiniz.<\/p>\n<p><code>200 OK<\/code>, iste\u011fin ba\u015far\u0131l\u0131 oldu\u011funu ancak k\u0131smi yan\u0131t verilmedi\u011fini g\u00f6sterir. Bir dosya iste\u011finde bu genellikle dosyan\u0131n tamam\u0131n\u0131n g\u00f6nderildi\u011fi anlam\u0131na gelir. Sunucu Range ba\u015fl\u0131\u011f\u0131n\u0131 dikkate almam\u0131\u015f olabilir. \u0130stemci bu yan\u0131t\u0131 mevcut par\u00e7an\u0131n sonuna eklerse dosya bozulabilir; gelen veriyi kalan b\u00f6l\u00fcm olarak de\u011fil, tam dosya olarak ele almal\u0131d\u0131r.<\/p>\n<p><code>416 Range Not Satisfiable<\/code>, istenen aral\u0131\u011f\u0131n kar\u015f\u0131lanamad\u0131\u011f\u0131n\u0131 belirtir. \u00d6rne\u011fin ba\u015flang\u0131\u00e7 konumu dosyan\u0131n son bayt\u0131n\u0131 a\u015f\u0131yorsa bu yan\u0131t beklenir. Sunucu <code>Content-Range: bytes *\/8388608<\/code> ile mevcut toplam boyutu bildirebilir. B\u00f6yle bir yan\u0131tta, bildirilen boyutu bilgisayar\u0131n\u0131zdaki par\u00e7an\u0131n boyutuyla kar\u015f\u0131la\u015ft\u0131r\u0131n; dosya de\u011fi\u015fmi\u015f veya yerel kopya zaten tamamlanm\u0131\u015f olabilir. Bu yan\u0131t tek ba\u015f\u0131na Range deste\u011finin bozuk oldu\u011funu g\u00f6stermez. <a href=\"https:\/\/www.dchost.com\/blog\/http-durum-kodlari-seo-ve-hosting-rehberi\/\">HTTP durum kodlar\u0131n\u0131n anlamlar\u0131<\/a>, kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z di\u011fer yan\u0131tlar\u0131 da yorumlaman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<h3><span id=\"Accept-Ranges_neden_tek_basina_yeterli_degildir\">Accept-Ranges neden tek ba\u015f\u0131na yeterli de\u011fildir?<\/span><\/h3>\n<p><code>Accept-Ranges: bytes<\/code>, sunucunun bayt aral\u0131\u011f\u0131 deste\u011fini bildiren ba\u015fl\u0131kt\u0131r; indirmeyi ba\u015far\u0131yla s\u00fcrd\u00fcrebilece\u011finizin kan\u0131t\u0131 de\u011fildir. Bu ba\u015fl\u0131\u011f\u0131n bulunmamas\u0131 da aral\u0131k iste\u011finin mutlaka reddedilece\u011fi anlam\u0131na gelmez. Deste\u011fi s\u0131namak i\u00e7in dosyan\u0131n belirli bir aral\u0131\u011f\u0131n\u0131 isteyip gelen par\u00e7ay\u0131 kontrol etmeniz gerekir. Sonraki ad\u0131mda bunu tek bir \u00f6rnek dosya \u00fczerinde, yan\u0131t ba\u015fl\u0131klar\u0131n\u0131 ve indirilen veri boyutunu birlikte inceleyerek yapabilirsiniz.<\/p>\n<h2><span id=\"Ornek_ortami_kurun_ve_kismi_yaniti_dogrulayin\">\u00d6rnek ortam\u0131 kurun ve k\u0131smi yan\u0131t\u0131 do\u011frulay\u0131n<\/span><\/h2>\n<p>\u00d6nce ba\u015fka servisler araya girmeden Nginx&#8217;in dosyan\u0131n istenen b\u00f6l\u00fcm\u00fcn\u00fc g\u00f6nderip g\u00f6ndermedi\u011fini kontrol edin. Bu kontrol ba\u015far\u0131l\u0131 oldu\u011funda, indirmeyi s\u00fcrd\u00fcrme denemesine ge\u00e7ebilirsiniz. B\u00f6ylece dosya sunucusunun davran\u0131\u015f\u0131n\u0131 uygulama veya \u00f6nbellek etkisinden ayr\u0131 incelemi\u015f olursunuz.<\/p>\n<figure class=\"aiw-figure\" data-aiw-visual-id=\"13347\" data-aiw-visual-key=\"8fadb6d7b01a18092d6cbda6c376f166124ed758e863170dc41c8d586c2042f6\"><img decoding=\"async\" src=\"https:\/\/www.dchost.com\/blog\/wp-content\/uploads\/2026\/11\/dchost-flow-tr-ecdf10bd57091c39739d.png\" alt=\"\u0130lk 1024 bayt iste\u011finden 206 yan\u0131t\u0131, Content-Range ve g\u00f6vde boyutu kontrol\u00fcne uzanan do\u011frulama ak\u0131\u015f\u0131.\" width=\"840\" height=\"948\" loading=\"lazy\" class=\"aiw-article-visual wp-image-13347\" srcset=\"https:\/\/www.dchost.com\/blog\/wp-content\/uploads\/2026\/11\/dchost-flow-tr-ecdf10bd57091c39739d.png 840w, https:\/\/www.dchost.com\/blog\/wp-content\/uploads\/2026\/11\/dchost-flow-tr-ecdf10bd57091c39739d-266x300.png 266w, https:\/\/www.dchost.com\/blog\/wp-content\/uploads\/2026\/11\/dchost-flow-tr-ecdf10bd57091c39739d-768x867.png 768w\" sizes=\"auto, (max-width: 840px) 100vw, 840px\" \/><figcaption>Ak\u0131\u015f \u015femas\u0131: Ak\u0131\u015f, \u00f6rnek dosyan\u0131n yaln\u0131z istenen b\u00f6l\u00fcm\u00fcn\u00fcn d\u00f6nd\u00fc\u011f\u00fcn\u00fc anlamak i\u00e7in durum kodu, Content-Range ve g\u00f6vde boyutunun birlikte nas\u0131l kontrol edildi\u011fini g\u00f6sterir.<\/figcaption><\/figure>\n<div class=\"aiw-note aiw-note-example\">\n<p class=\"aiw-box-title\">\u00d6rnek senaryo<\/p>\n<p>Sudo, yani y\u00f6netici yetkisiyle komut \u00e7al\u0131\u015ft\u0131rma izni olan kullan\u0131c\u0131n\u0131zla bo\u015f bir Ubuntu 24.04 test sunucusundas\u0131n\u0131z. B\u00fct\u00fcn komutlar\u0131 bu sunucunun terminalinde \u00e7al\u0131\u015ft\u0131racaks\u0131n\u0131z. Ayarlar tamamland\u0131\u011f\u0131nda Nginx yaln\u0131z <code>127.0.0.1:8080<\/code> \u00fczerinden, yani sunucunun kendi i\u00e7inden eri\u015filebilir olacak. Kullanaca\u011f\u0131n\u0131z dosya ger\u00e7ek bir ZIP ar\u015fivi de\u011fil, rastgele \u00fcretilmi\u015f 8388608 baytl\u0131k test verisidir.<\/p>\n<\/div>\n<h3><span id=\"Nginx8217i_kurun_ve_test_dosyasini_olusturun\">Nginx&#8217;i kurun ve test dosyas\u0131n\u0131 olu\u015fturun<\/span><\/h3>\n<p>Nginx web sunucusu dosyay\u0131 sunacak; <code>curl<\/code> komut sat\u0131r\u0131 arac\u0131 ise iste\u011fi g\u00f6nderip yan\u0131t\u0131 kaydedecek. Paket kurulumu varsay\u0131lan siteyi ge\u00e7ici olarak 80 numaral\u0131 ba\u011flant\u0131 noktas\u0131nda ba\u015flatabilir. Kuruluma ge\u00e7meden \u00f6nce a\u011f g\u00fcvenlik duvar\u0131nda d\u0131\u015far\u0131dan gelen web trafi\u011fini kapal\u0131 tutun; terminal ba\u011flant\u0131n\u0131z i\u00e7in gereken SSH eri\u015fimini kapatmay\u0131n.<\/p>\n<p>A\u015fa\u011f\u0131daki komutlar Nginx&#8217;i kurup durdurur, ba\u015flang\u0131\u00e7 ayarlar\u0131n\u0131 yedekler ve varsay\u0131lan siteyi devreden \u00e7\u0131kar\u0131r. Ard\u0131ndan test dosyas\u0131n\u0131 ve yan\u0131tlar\u0131 kaydedece\u011finiz \u00e7al\u0131\u015fma klas\u00f6r\u00fcn\u00fc olu\u015fturur. Bu ad\u0131mlar\u0131 mevcut siteleri bar\u0131nd\u0131ran bir sunucuda de\u011fil, belirtilen bo\u015f test ortam\u0131nda uygulay\u0131n.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo apt update\nsudo apt install -y nginx curl\nsudo systemctl stop nginx\nsudo cp -a \/etc\/nginx \/etc\/nginx.range-demo.bak\nsudo rm -f \/etc\/nginx\/sites-enabled\/default\n\nsudo install -d -m 755 \/srv\/range-demo\nsudo dd if=\/dev\/urandom of=\/srv\/range-demo\/paket-v1.bin bs=1048576 count=8 status=progress\nsudo chmod 644 \/srv\/range-demo\/paket-v1.bin\nmkdir -p \/tmp\/range-demo\ncd \/tmp\/range-demo<\/code><\/pre>\n<p>Yedek komutunu ayarlar\u0131 de\u011fi\u015ftirmeden \u00f6nce yaln\u0131z bir kez \u00e7al\u0131\u015ft\u0131r\u0131n; <code>\/etc\/nginx.range-demo.bak<\/code> \u00f6nceden varsa ayn\u0131 komutu yeniden \u00e7al\u0131\u015ft\u0131rmay\u0131n. Bu yedek, b\u00f6l\u00fcm\u00fcn sonundaki geri alma ad\u0131mlar\u0131nda kullan\u0131lacak. Bo\u015f kurulumda varsay\u0131lan siteyi devreden \u00e7\u0131karmak d\u0131\u015f adreslerdeki dinleyiciyi kald\u0131r\u0131r. Dosyaya verilen okuma izni de Nginx&#8217;in test verisini sunmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3><span id=\"Yerel_dosya_sunucusunu_ayarlayin\">Yerel dosya sunucusunu ayarlay\u0131n<\/span><\/h3>\n<p>Ayn\u0131 terminalde a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak <code>\/etc\/nginx\/conf.d\/range-demo.conf<\/code> dosyas\u0131n\u0131 olu\u015fturun. <code>root<\/code>, istenen dosyan\u0131n aranaca\u011f\u0131 klas\u00f6r\u00fc belirler; burada az \u00f6nce olu\u015fturdu\u011funuz test klas\u00f6r\u00fcn\u00fc kullan\u0131r. Nginx, diskte duran statik dosyalarda Range isteklerini i\u015fleyebilir; elle <code>Accept-Ranges<\/code> ba\u015fl\u0131\u011f\u0131 eklemeniz gerekmez.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo tee \/etc\/nginx\/conf.d\/range-demo.conf &gt; \/dev\/null &lt;&lt;&#039;EOF&#039;\nserver {\n    listen 127.0.0.1:8080;\n    server_name localhost;\n    root \/srv\/range-demo;\n    gzip off;\n\n    location \/ {\n        try_files $uri =404;\n    }\n}\nEOF\nsudo nginx -t &amp;&amp; sudo systemctl start nginx\nsudo systemctl reload nginx<\/code><\/pre>\n<p><code>nginx -t<\/code> \u00e7\u0131kt\u0131s\u0131nda ayar testinin ba\u015far\u0131l\u0131 oldu\u011funu g\u00f6rmelisiniz. Test hata verirse yeniden y\u00fckleme sat\u0131r\u0131na ge\u00e7meyin; \u00e7\u0131kt\u0131da belirtilen dosya ve sat\u0131r\u0131 d\u00fczeltip ayar testini tekrarlay\u0131n. Ba\u015far\u0131l\u0131 ba\u015flang\u0131c\u0131n ard\u0131ndan Nginx yerel adreste dosya isteklerini kar\u015f\u0131layacakt\u0131r. S\u0131k\u0131\u015ft\u0131rman\u0131n kapal\u0131 olmas\u0131, bu ilk kontrolde dosyan\u0131n do\u011frudan baytlar\u0131n\u0131 incelemenizi sa\u011flar.<\/p>\n<h3><span id=\"Ilk_1024_bayti_GET_istegiyle_dogrulayin\">\u0130lk 1024 bayt\u0131 GET iste\u011fiyle do\u011frulay\u0131n<\/span><\/h3>\n<p>Ayn\u0131 terminalde a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n. Curl varsay\u0131lan olarak dosyan\u0131n i\u00e7eri\u011fini alan GET iste\u011fini kullan\u0131r; yaln\u0131z ba\u015fl\u0131k isteyen <code>-I<\/code> se\u00e7ene\u011fini kullanmay\u0131n. Burada ba\u015fl\u0131klar ve g\u00f6vde, yani yan\u0131tla gelen dosya verisi, ayr\u0131 dosyalara kaydedilir. Son iki komut ba\u015fl\u0131klar\u0131 ekrana yazd\u0131r\u0131r ve kaydedilen g\u00f6vdenin bayt say\u0131s\u0131n\u0131 g\u00f6sterir.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">cd \/tmp\/range-demo\ncurl --silent --show-error --noproxy &#039;*&#039; \\\n  -H &#039;Range: bytes=0-1023&#039; \\\n  -D ilk-basliklar.txt \\\n  -o ilk-1024.bin \\\n  http:\/\/127.0.0.1:8080\/paket-v1.bin\ncat ilk-basliklar.txt\nwc -c ilk-1024.bin<\/code><\/pre>\n<p><code>--noproxy '*'<\/code>, ortamda tan\u0131ml\u0131 bir ara sunucunun bu yerel teste kar\u0131\u015fmas\u0131n\u0131 \u00f6nler. \u00c7\u0131kt\u0131n\u0131zda a\u015fa\u011f\u0131daki durum kodunu, ba\u015fl\u0131k de\u011ferlerini ve dosya boyutunu aray\u0131n. Bunlar yap\u0131lm\u0131\u015f bir \u00f6l\u00e7\u00fcm de\u011fil, \u00f6rnek ortamda beklenen de\u011ferlerdir; yan\u0131tta ba\u015fka ba\u015fl\u0131klar da bulunabilir:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">HTTP\/1.1 206 Partial Content\nContent-Length: 1024\nContent-Range: bytes 0-1023\/8388608\n\n1024 ilk-1024.bin<\/code><\/pre>\n<p>404 g\u00f6r\u00fcrseniz \u00f6nce <code>ls -l \/srv\/range-demo\/paket-v1.bin<\/code> ile dosyan\u0131n beklenen yerde bulundu\u011funu kontrol edin. Dosya yoksa olu\u015fturma ad\u0131m\u0131n\u0131, varsa istekteki dosya ad\u0131yla sunucu ayar\u0131ndaki klas\u00f6r\u00fc kar\u015f\u0131la\u015ft\u0131r\u0131n. 200 g\u00f6r\u00fcrseniz <code>sudo nginx -T<\/code> \u00e7\u0131kt\u0131s\u0131nda 8080 dinleyicisinin \u00f6rnek sunucu blo\u011funa ait oldu\u011funu kontrol edin ve <code>max_ranges 0;<\/code> gibi aral\u0131k i\u015flemeyi kapatan bir ayar\u0131 aray\u0131n. Yaln\u0131z belirledi\u011finiz nedeni d\u00fczeltin; ayar de\u011fi\u015ftiyse ayar testinden sonra Nginx&#8217;i yeniden y\u00fckleyin. Ayn\u0131 GET iste\u011fini tekrarlad\u0131\u011f\u0131n\u0131zda durum kodu, aral\u0131k ve g\u00f6vde boyutu birlikte beklenen de\u011ferlerle e\u015fle\u015fmelidir.<\/p>\n<p>Sonraki s\u00fcrd\u00fcrme denemesi i\u00e7in ortam\u0131 \u015fimdilik koruyun. B\u00fct\u00fcn testleri bitirdi\u011finizde a\u015fa\u011f\u0131daki komutlar \u00f6rnek sunucu ayar\u0131n\u0131 kald\u0131r\u0131p yedekledi\u011finiz ba\u015flang\u0131\u00e7 ayarlar\u0131n\u0131 geri getirir. Bu i\u015flem varsay\u0131lan siteyi de yeniden etkinle\u015ftirece\u011finden, d\u0131\u015far\u0131dan gelen web trafi\u011fine uygulad\u0131\u011f\u0131n\u0131z g\u00fcvenlik duvar\u0131 k\u0131s\u0131t\u0131n\u0131 koruyun:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo rm \/etc\/nginx\/conf.d\/range-demo.conf\nsudo cp -a \/etc\/nginx.range-demo.bak\/. \/etc\/nginx\/\nsudo nginx -t &amp;&amp; sudo systemctl reload nginx<\/code><\/pre>\n<h2><span id=\"Kalan_baytlari_indirin_ve_dosya_butunlugunu_kontrol_edin\">Kalan baytlar\u0131 indirin ve dosya b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc kontrol edin<\/span><\/h2>\n<h3><span id=\"Ilk_parcayi_kaydedip_ayni_dosyaya_devam_edin\">\u0130lk par\u00e7ay\u0131 kaydedip ayn\u0131 dosyaya devam edin<\/span><\/h3>\n<p>Ayn\u0131 test sunucusunun terminalinde, dosyan\u0131n ilk 1048576 bayt\u0131n\u0131 alarak yar\u0131m kalm\u0131\u015f bir indirmeyi temsil eden par\u00e7a olu\u015fturun. A\u015fa\u011f\u0131daki komutlar yaln\u0131z \u00f6rnek istemci dosyas\u0131 <code>indirme.bin<\/code> \u00fczerine yazar; kaynak dosyay\u0131 de\u011fi\u015ftirmez. \u00d6nceki kontrolden kalan 1024 baytl\u0131k dosya yerine bu daha b\u00fcy\u00fck par\u00e7ayla s\u00fcrd\u00fcrmeyi deneyeceksiniz.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">cd \/tmp\/range-demo\ncurl --silent --show-error --noproxy &#039;*&#039; \\\n  -H &#039;Range: bytes=0-1048575&#039; \\\n  -D parca-basliklar.txt -o indirme.bin \\\n  http:\/\/127.0.0.1:8080\/paket-v1.bin\ncat parca-basliklar.txt\nwc -c indirme.bin<\/code><\/pre>\n<p>Devam etmeden \u00f6nce ba\u015fl\u0131klarda <code>206<\/code> ve <code>Content-Range: bytes 0-1048575\/8388608<\/code>, boyut \u00e7\u0131kt\u0131s\u0131nda ise 1048576 bayt g\u00f6rmelisiniz. Yan\u0131ttaki <code>ETag<\/code>, sunucunun dosya s\u00fcr\u00fcm\u00fcn\u00fc ay\u0131rt etmek i\u00e7in verdi\u011fi do\u011frulay\u0131c\u0131 de\u011ferdir. <code>If-Range<\/code> ba\u015fl\u0131\u011f\u0131yla bu de\u011feri g\u00f6nderdi\u011finizde, kalan b\u00f6l\u00fcm\u00fcn yaln\u0131z do\u011frulay\u0131c\u0131 h\u00e2l\u00e2 e\u015fle\u015fiyorsa g\u00f6nderilmesini istersiniz. A\u015fa\u011f\u0131daki komut, kaydetti\u011finiz ba\u015fl\u0131klardan bu de\u011feri al\u0131p ekrana yazd\u0131r\u0131r:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">etag=$(awk &#039;tolower($1)==&quot;etag:&quot; {sub(\/\\r$\/, &quot;&quot;); print $2; exit}&#039; parca-basliklar.txt)\nprintf &#039;%s\\n&#039; &quot;$etag&quot;<\/code><\/pre>\n<p>Bu Nginx \u00f6rne\u011finde \u00e7ift t\u0131rnakl\u0131 bir de\u011fer beklenir; t\u0131rnaklar\u0131 koruyun. De\u011fer bo\u015fsa veya bayt d\u00fczeyinde e\u015fitlik g\u00fcvencesi vermeyen zay\u0131f do\u011frulay\u0131c\u0131 i\u015fareti <code>W\/<\/code> ile ba\u015fl\u0131yorsa bu ETag ile If-Range testine ge\u00e7meyin. Uygun de\u011feri ald\u0131ysan\u0131z a\u015fa\u011f\u0131daki komutlarla \u00f6nce ba\u015flang\u0131\u00e7 par\u00e7as\u0131n\u0131n kopyas\u0131n\u0131 saklay\u0131n, ard\u0131ndan indirmeyi s\u00fcrd\u00fcr\u00fcn:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">cp indirme.bin ilk-parca.bin\ncurl --silent --show-error --noproxy &#039;*&#039; \\\n  -C - -H &quot;If-Range: $etag&quot; \\\n  -D devam-basliklar.txt -o indirme.bin \\\n  http:\/\/127.0.0.1:8080\/paket-v1.bin\ncat devam-basliklar.txt\nwc -c indirme.bin\nsha256sum \/srv\/range-demo\/paket-v1.bin indirme.bin<\/code><\/pre>\n<p><code>-C -<\/code>, devam edilecek konumu yerel dosyan\u0131n boyutundan hesaplar. Beklenen yan\u0131t <code>206<\/code> ve <code>Content-Range: bytes 1048576-8388607\/8388608<\/code>; tamamlanan dosyan\u0131n boyutu ise 8388608 baytt\u0131r. Bu de\u011ferler, sunucunun ilk par\u00e7adan sonraki b\u00f6l\u00fcm\u00fc g\u00f6nderdi\u011fini g\u00f6sterir.<\/p>\n<p>\u0130\u00e7eri\u011fin de do\u011fru birle\u015fti\u011fini son komutla kontrol edersiniz. SHA-256 sa\u011flama toplam\u0131, dosya i\u00e7eri\u011finden hesaplanan \u00f6zettir; \u00e7\u0131kt\u0131n\u0131n iki sat\u0131r\u0131n\u0131n ba\u015f\u0131ndaki de\u011ferler ayn\u0131 olmal\u0131d\u0131r. Fark varsa dosyay\u0131 kullanmay\u0131n. Ba\u015fl\u0131klar\u0131 ve boyutu incelemek \u00fczere <code>cp ilk-parca.bin indirme.bin<\/code> ile ba\u015flang\u0131\u00e7 par\u00e7as\u0131na d\u00f6nebilirsiniz.<\/p>\n<h3><span id=\"Surum_uyusmazligini_guvenli_bicimde_sinayin\">S\u00fcr\u00fcm uyu\u015fmazl\u0131\u011f\u0131n\u0131 g\u00fcvenli bi\u00e7imde s\u0131nay\u0131n<\/span><\/h3>\n<p>Dosya de\u011fi\u015fip do\u011frulay\u0131c\u0131 art\u0131k e\u015fle\u015fmedi\u011finde sunucu aral\u0131k iste\u011fini dikkate almaz ve tam dosyay\u0131 <code>200<\/code> ile g\u00f6nderir. Ayn\u0131 terminalde, kayna\u011f\u0131 de\u011fi\u015ftirmeden bilerek farkl\u0131 bir ETag g\u00f6ndererek bu davran\u0131\u015f\u0131 s\u0131nay\u0131n:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">curl --silent --show-error --noproxy &#039;*&#039; \\\n  -H &#039;Range: bytes=1048576-&#039; \\\n  -H &#039;If-Range: &quot;eslesmeyen-deneme&quot;&#039; \\\n  -D uyusmazlik-basliklar.txt -o \/dev\/null \\\n  http:\/\/127.0.0.1:8080\/paket-v1.bin\ncat uyusmazlik-basliklar.txt<\/code><\/pre>\n<p>Burada <code>200<\/code> beklenir; komut yan\u0131t g\u00f6vdesini mevcut par\u00e7aya eklemeden atar. Ger\u00e7ek s\u00fcrd\u00fcrmede b\u00f6yle bir yan\u0131t al\u0131rsan\u0131z eski par\u00e7ayla yeni s\u00fcr\u00fcm\u00fc birle\u015ftirmeyin. Tam dosyay\u0131 ayr\u0131 bir dosyaya ba\u015ftan indirin.<\/p>\n<h3><span id=\"Dosya_sinirini_asan_istegi_kontrol_edin\">Dosya s\u0131n\u0131r\u0131n\u0131 a\u015fan iste\u011fi kontrol edin<\/span><\/h3>\n<p>Son bayt\u0131n konumu 8388607 oldu\u011fundan, 8388608 konumundan ba\u015flayan bir aral\u0131k dosyan\u0131n d\u0131\u015f\u0131nda kal\u0131r. Sunucunun bu iste\u011fi nas\u0131l kar\u015f\u0131lad\u0131\u011f\u0131n\u0131 g\u00f6rmek i\u00e7in ayn\u0131 terminalde a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">curl --silent --show-error --noproxy &#039;*&#039; \\\n  -H &#039;Range: bytes=8388608-&#039; \\\n  -D sinir-basliklar.txt -o \/dev\/null \\\n  http:\/\/127.0.0.1:8080\/paket-v1.bin\ncat sinir-basliklar.txt<\/code><\/pre>\n<p>Beklenen <code>416<\/code> ve <code>Content-Range: bytes *\/8388608<\/code>, bu kontroll\u00fc denemede sunucunun dosya s\u0131n\u0131r\u0131n\u0131 do\u011fru uygulad\u0131\u011f\u0131n\u0131 g\u00f6sterir; s\u00fcrd\u00fcrme deste\u011finin bozuk oldu\u011fu anlam\u0131na gelmez. B\u00f6ylece ba\u015far\u0131l\u0131 s\u00fcrd\u00fcrmenin yan\u0131nda, ge\u00e7ersiz ba\u015flang\u0131\u00e7 konumunun reddedildi\u011fini ve mevcut toplam boyutun bildirildi\u011fini de kontrol etmi\u015f olursunuz.<\/p>\n<h2><span id=\"Proxy_CDN_ve_uygulama_katmaninda_sorunu_ayirin\">Proxy, CDN ve uygulama katman\u0131nda sorunu ay\u0131r\u0131n<\/span><\/h2>\n<h3><span id=\"Kaynak_sunucuyla_dis_uctan_ayni_parcayi_isteyin\">Kaynak sunucuyla d\u0131\u015f u\u00e7tan ayn\u0131 par\u00e7ay\u0131 isteyin<\/span><\/h3>\n<p>Yerel test ba\u015far\u0131l\u0131ysa Nginx&#8217;in \u00f6rnek dosyada indirmeyi s\u00fcrd\u00fcrebildi\u011fini bilirsiniz; ancak kullan\u0131c\u0131ya a\u00e7\u0131k indirme yolunu hen\u00fcz kontrol etmi\u015f olmazs\u0131n\u0131z. Proxy, istekleri kaynak sunucuya ileten ara sunucudur. CDN ise i\u00e7eri\u011fi farkl\u0131 noktalardan sunan i\u00e7erik da\u011f\u0131t\u0131m a\u011f\u0131d\u0131r. Kaynak sunucunun yan\u0131t\u0131n\u0131 kullan\u0131c\u0131ya a\u00e7\u0131k adresin yan\u0131t\u0131yla kar\u015f\u0131la\u015ft\u0131rarak sorunun bu katmanlarda olup olmad\u0131\u011f\u0131n\u0131 daraltabilirsiniz.<\/p>\n<figure class=\"aiw-figure\" data-aiw-visual-id=\"13349\" data-aiw-visual-key=\"415d9776f798a798c458b3e36d8c4e65240b490ceab8d6da3376944fffe447c7\"><img decoding=\"async\" src=\"https:\/\/www.dchost.com\/blog\/wp-content\/uploads\/2026\/11\/dchost-flow-tr-ef6a8ebca2e581dc7009.png\" alt=\"Kaynak ve d\u0131\u015f u\u00e7 yan\u0131tlar\u0131n\u0131n kar\u015f\u0131la\u015ft\u0131r\u0131lmas\u0131ndan dar d\u00fczeltme ve yeniden kontrole uzanan te\u015fhis ak\u0131\u015f\u0131.\" width=\"840\" height=\"1026\" loading=\"lazy\" class=\"aiw-article-visual wp-image-13349\" srcset=\"https:\/\/www.dchost.com\/blog\/wp-content\/uploads\/2026\/11\/dchost-flow-tr-ef6a8ebca2e581dc7009.png 840w, https:\/\/www.dchost.com\/blog\/wp-content\/uploads\/2026\/11\/dchost-flow-tr-ef6a8ebca2e581dc7009-246x300.png 246w, https:\/\/www.dchost.com\/blog\/wp-content\/uploads\/2026\/11\/dchost-flow-tr-ef6a8ebca2e581dc7009-838x1024.png 838w, https:\/\/www.dchost.com\/blog\/wp-content\/uploads\/2026\/11\/dchost-flow-tr-ef6a8ebca2e581dc7009-768x938.png 768w\" sizes=\"auto, (max-width: 840px) 100vw, 840px\" \/><figcaption>Ak\u0131\u015f \u015femas\u0131: Kaynak sunucu ile kullan\u0131c\u0131ya a\u00e7\u0131k u\u00e7taki ayn\u0131 iste\u011fi kar\u015f\u0131la\u015ft\u0131rmak, k\u0131smi yan\u0131t davran\u0131\u015f\u0131n\u0131n hangi katmanda de\u011fi\u015fti\u011fini daraltmaya yard\u0131mc\u0131 olur.<\/figcaption><\/figure>\n<p>\u00d6rnek ortamda CDN yoktur; <code>127.0.0.1:8080<\/code> d\u0131\u015far\u0131ya a\u00e7\u0131k de\u011fildir. A\u015fa\u011f\u0131daki kar\u015f\u0131la\u015ft\u0131rmay\u0131 yaln\u0131z y\u00f6netti\u011finiz mevcut bir HTTPS indirme adresinde yap\u0131n. Kayna\u011fa do\u011frudan eri\u015fim izniniz ve kaynak sunucuda alan ad\u0131 i\u00e7in ge\u00e7erli bir sertifika bulunmal\u0131d\u0131r. Test sunucusunun Bash terminalinde s\u0131ras\u0131yla tam HTTPS indirme adresini, yaln\u0131z alan ad\u0131n\u0131 ve kaynak sunucunun IP adresini girin. Ayn\u0131 s\u00fcr\u00fcm\u00fc sunulan, en az 1024 baytl\u0131k bir test dosyas\u0131 se\u00e7in:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">cd \/tmp\/range-demo\nread -r -p &#039;HTTPS indirme adresi: &#039; url\nread -r -p &#039;Adresteki alan ad\u0131: &#039; alan\nread -r -p &#039;Kaynak sunucunun IP adresi: &#039; kaynak_ip\ncurl --silent --show-error --noproxy &#039;*&#039; \\\n  -H &#039;Range: bytes=0-1023&#039; -H &#039;Accept-Encoding: identity&#039; \\\n  -D dis-basliklar.txt -o dis-parca.bin &quot;$url&quot;\ncurl --silent --show-error --noproxy &#039;*&#039; \\\n  --resolve &quot;${alan}:443:${kaynak_ip}&quot; \\\n  -H &#039;Range: bytes=0-1023&#039; -H &#039;Accept-Encoding: identity&#039; \\\n  -D kaynak-basliklar.txt -o kaynak-parca.bin &quot;$url&quot;\ncat dis-basliklar.txt kaynak-basliklar.txt\nwc -c dis-parca.bin kaynak-parca.bin<\/code><\/pre>\n<p>\u0130lk istek kullan\u0131c\u0131ya a\u00e7\u0131k adrese gider. \u0130kinci istekte <code>--resolve<\/code>, alan ad\u0131n\u0131 ve TLS sertifika kontrol\u00fcn\u00fc, yani g\u00fcvenli ba\u011flant\u0131daki sunucu kimli\u011fi do\u011frulamas\u0131n\u0131 koruyarak ba\u011flant\u0131y\u0131 kaynak IP&#8217;sine g\u00f6nderir. Komutlar standart 443 portunu varsayar ve sunucudan s\u0131k\u0131\u015ft\u0131r\u0131lmam\u0131\u015f i\u00e7erik ister. Ayn\u0131 dosya s\u00fcr\u00fcm\u00fcnde iki tarafta da <code>206<\/code>, ayn\u0131 <code>Content-Range<\/code> ve 1024 baytl\u0131k g\u00f6vde bekleyin.<\/p>\n<p>Bu komutlar y\u00f6nlendirmeleri otomatik izlemez ve taray\u0131c\u0131 oturumunuzu kullanmaz. Y\u00f6nlendirme varsa yan\u0131t\u0131n Location ba\u015fl\u0131\u011f\u0131ndaki hedefi inceleyin; oturum a\u00e7ma sayfas\u0131n\u0131 dosya sanmay\u0131n. Kayna\u011fa eri\u015filemiyorsa g\u00fcvenlik duvar\u0131n\u0131 d\u0131\u015far\u0131ya a\u00e7mak yerine kar\u015f\u0131la\u015ft\u0131rmay\u0131 kaynak eri\u015fimine izin verilen a\u011fdan yap\u0131n.<\/p>\n<h3><span id=\"Baslik_onbellek_ve_sikistirma_farkini_daraltin\">Ba\u015fl\u0131k, \u00f6nbellek ve s\u0131k\u0131\u015ft\u0131rma fark\u0131n\u0131 daralt\u0131n<\/span><\/h3>\n<p>Kaynak <code>206<\/code>, d\u0131\u015f u\u00e7 <code>200<\/code> veriyorsa \u00f6nce iki yan\u0131t\u0131n da bekledi\u011finiz dosyaya ait oldu\u011fundan emin olun. Ard\u0131ndan ara katman\u0131n kayna\u011fa g\u00f6nderdi\u011fi istekte <code>Range<\/code> ve s\u00fcrd\u00fcrme s\u0131ras\u0131nda <code>If-Range<\/code> bulunup bulunmad\u0131\u011f\u0131n\u0131 kontrol edin. Nginx ara sunucusunda <code>sudo nginx -T<\/code> \u00e7\u0131kt\u0131s\u0131nda bu ba\u015fl\u0131klar\u0131 bo\u015faltan <code>proxy_set_header<\/code> sat\u0131rlar\u0131n\u0131 veya <code>proxy_pass_request_headers off<\/code> ayar\u0131n\u0131 aray\u0131n.<\/p>\n<p>B\u00f6yle bir ayar bulursan\u0131z bulundu\u011fu dosyan\u0131n yede\u011fini al\u0131n ve yaln\u0131z ilgili indirme yolundaki ba\u015fl\u0131k aktar\u0131m\u0131n\u0131 d\u00fczeltin. <code>nginx -t<\/code> ba\u015far\u0131l\u0131ysa ayarlar\u0131 yeniden y\u00fckleyip kaynak ve d\u0131\u015f u\u00e7 isteklerini tekrarlay\u0131n. Beklenen de\u011fi\u015fiklik, d\u0131\u015f u\u00e7ta da do\u011fru aral\u0131k ve g\u00f6vde boyutuyla k\u0131smi yan\u0131t al\u0131nmas\u0131d\u0131r. De\u011fi\u015fiklik i\u015fe yaramazsa veya ba\u015fka bir sorun \u00e7\u0131kar\u0131rsa yedek dosyay\u0131 geri koyun, ayar testinden sonra yeniden y\u00fckleyin.<\/p>\n<p>\u0130lk istekle sonraki iste\u011fin yan\u0131t\u0131 farkl\u0131ysa CDN panelinde test dosyas\u0131n\u0131n \u00f6nbellekten sunulup sunulmad\u0131\u011f\u0131na bak\u0131n. Yaln\u0131z bu dosyan\u0131n \u00f6nbelle\u011fini temizleyip ayn\u0131 iste\u011fi iki kez tekrarlay\u0131n. Davran\u0131\u015f \u00f6nbellek dolunca de\u011fi\u015fiyorsa ilgili indirme yolunun aral\u0131k istekleri ve k\u0131smi yan\u0131tlar i\u00e7in ayarlar\u0131n\u0131 inceleyin; de\u011fi\u015fiklikten \u00f6nce mevcut de\u011ferleri kaydedin.<\/p>\n<p><code>Content-Encoding<\/code>, yan\u0131ta uygulanan s\u0131k\u0131\u015ft\u0131rmay\u0131 belirtir. \u0130ki yan\u0131tta bu ba\u015fl\u0131k farkl\u0131ysa ayn\u0131 dosyan\u0131n s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f ve s\u0131k\u0131\u015ft\u0131r\u0131lmam\u0131\u015f bi\u00e7imlerini kar\u015f\u0131la\u015ft\u0131r\u0131yor olabilirsiniz. Yaln\u0131z indirme yolundaki s\u0131k\u0131\u015ft\u0131rmay\u0131 veya i\u00e7erik d\u00f6n\u00fc\u015f\u00fcm\u00fcn\u00fc kapatarak ayn\u0131 kar\u015f\u0131la\u015ft\u0131rmay\u0131 yenileyin. Site genelindeki s\u0131k\u0131\u015ft\u0131rmay\u0131 kapatmay\u0131n; fark d\u00fczelmezse kaydetti\u011finiz ayarlara d\u00f6n\u00fcn.<\/p>\n<h3><span id=\"PHP_ve_sureli_baglantilari_ayri_kontrol_edin\">PHP ve s\u00fcreli ba\u011flant\u0131lar\u0131 ayr\u0131 kontrol edin<\/span><\/h3>\n<p>Statik dosyan\u0131n indirmesi kald\u0131\u011f\u0131 yerden s\u00fcr\u00fcyor, PHP \u00fczerinden indirme ise ba\u015fa d\u00f6n\u00fcyorsa ayn\u0131 eri\u015fim yetkisiyle uygulamaya da aral\u0131k iste\u011fi g\u00f6nderip yan\u0131t\u0131 kar\u015f\u0131la\u015ft\u0131r\u0131n. PHP&#8217;de yaln\u0131z <code>readfile()<\/code> kullan\u0131lmas\u0131 aral\u0131k deste\u011fi sa\u011flamaz. Yetkilendirmeyi uygulamada tutup dosya aktar\u0131m\u0131n\u0131 Nginx&#8217;e devretmek bir se\u00e7enektir. Bunun i\u00e7in d\u0131\u015far\u0131dan do\u011frudan eri\u015fimi engelleyen <code>internal<\/code> konumu ve uygulaman\u0131n Nginx&#8217;e aktar\u0131m yolunu bildirdi\u011fi <code>X-Accel-Redirect<\/code> ba\u015fl\u0131\u011f\u0131 birlikte kullan\u0131labilir. \u00dccretli dosyay\u0131 herkese a\u00e7\u0131k klas\u00f6re ta\u015f\u0131mak bu \u00e7\u00f6z\u00fcm\u00fcn yerine ge\u00e7mez.<\/p>\n<p>Devam iste\u011fi <code>403<\/code> veya oturum sayfas\u0131na y\u00f6nlendirme al\u0131yorsa \u00f6nce ba\u011flant\u0131n\u0131n ge\u00e7erlilik s\u00fcresini ve oturumun h\u00e2l\u00e2 ge\u00e7erli olup olmad\u0131\u011f\u0131n\u0131 kontrol edin. Bu yan\u0131tlar, aral\u0131k deste\u011finden \u00f6nce eri\u015fim iznini ara\u015ft\u0131rman\u0131z gerekti\u011fini g\u00f6sterir; tek ba\u015f\u0131na ba\u011flant\u0131n\u0131n s\u00fcresinin doldu\u011funu kan\u0131tlamaz. Yeni yetkili ba\u011flant\u0131da dosya s\u00fcr\u00fcm\u00fcn\u00fc ve ETag do\u011frulay\u0131c\u0131s\u0131n\u0131 ilk par\u00e7an\u0131n yan\u0131t\u0131yla kar\u015f\u0131la\u015ft\u0131r\u0131n. Ba\u011flant\u0131n\u0131n yenilenmesi tek ba\u015f\u0131na eski par\u00e7aya g\u00fcvenle ekleme yap\u0131labilece\u011fini g\u00f6stermez.<\/p>\n<h2><span id=\"Sik_Sorulan_Sorular\">S\u0131k Sorulan Sorular<\/span><\/h2>\n<h3><span id=\"Indirmeyi_surdurebilmek_icin_HTTP3_gerekli_mi\">\u0130ndirmeyi s\u00fcrd\u00fcrebilmek i\u00e7in HTTP\/3 gerekli mi?<\/span><\/h3>\n<p>Hay\u0131r. HTTP Range ile indirmeyi s\u00fcrd\u00fcrme, HTTP\/1.1 ve HTTP\/2 ile de \u00e7al\u0131\u015f\u0131r. HTTP\/3&#8217;e ge\u00e7meniz, uygulaman\u0131n eksik aral\u0131k deste\u011fini d\u00fczeltmez. <a href=\"https:\/\/www.dchost.com\/blog\/http-3-protokolu-web-hosting-performansina-etkileri\/\">HTTP\/3 protokol\u00fcn\u00fcn performansa etkileri<\/a> ba\u011flant\u0131 ko\u015fullar\u0131na g\u00f6re de\u011fi\u015febilir; indirmeyi kald\u0131\u011f\u0131 yerden s\u00fcrd\u00fcrmek i\u00e7inse indirme program\u0131n\u0131n kalan aral\u0131\u011f\u0131 istemesi ve sunucunun bu iste\u011fi do\u011fru kar\u015f\u0131lamas\u0131 gerekir.<\/p>\n<h3><span id=\"Sunucu_destekliyorsa_her_tarayici_indirmeye_devam_eder_mi\">Sunucu destekliyorsa her taray\u0131c\u0131 indirmeye devam eder mi?<\/span><\/h3>\n<p>Hay\u0131r. Taray\u0131c\u0131n\u0131n indirmeyi s\u00fcrd\u00fcrebilmesi; s\u00fcr\u00fcm\u00fcne, indirme kayd\u0131n\u0131n ve yerel par\u00e7an\u0131n korunmas\u0131na, dosyaya eri\u015fimin h\u00e2l\u00e2 ge\u00e7erli olmas\u0131na ba\u011fl\u0131d\u0131r. Siz ba\u011flant\u0131y\u0131 yeniden t\u0131klad\u0131\u011f\u0131n\u0131zda mevcut i\u015flem yerine yeni bir indirme ba\u015flayabilir. \u00d6nce taray\u0131c\u0131n\u0131n indirmeler listesindeki <strong>Devam et<\/strong> se\u00e7ene\u011fini kullan\u0131n; bu se\u00e7enek her kesinti t\u00fcr\u00fcnde sunulmayabilir. G\u00fcvenli s\u00fcrd\u00fcrme i\u00e7in sunulan dosyan\u0131n da ayn\u0131 s\u00fcr\u00fcmde olmas\u0131 gerekir.<\/p>\n<h3><span id=\"Paralel_indirme_her_zaman_daha_hizli_mi\">Paralel indirme her zaman daha h\u0131zl\u0131 m\u0131?<\/span><\/h3>\n<p>Hay\u0131r. Paralel indirme, dosyan\u0131n farkl\u0131 aral\u0131klar\u0131n\u0131 e\u015fzamanl\u0131 isteklerle al\u0131r. H\u0131z yaln\u0131z ba\u011flant\u0131 ba\u015f\u0131na s\u0131n\u0131rlan\u0131yorsa yarar sa\u011flayabilir; kullan\u0131labilir toplam bant geni\u015fli\u011fi zaten doluysa h\u0131z kazand\u0131rmayabilir. Fazla istek, sunucunun izin verdi\u011fi istek say\u0131s\u0131n\u0131 da a\u015fabilir. \u0130ndirme y\u00f6neticinizde \u00f6nce tek par\u00e7ayla, ard\u0131ndan az say\u0131da e\u015fzamanl\u0131 par\u00e7ayla ayn\u0131 dosyay\u0131 deneyin; par\u00e7a say\u0131s\u0131n\u0131 art\u0131rmadan \u00f6nce aktar\u0131m h\u0131z\u0131n\u0131 ve olu\u015fan hatalar\u0131 kar\u015f\u0131la\u015ft\u0131r\u0131n.<\/p>\n<h3><span id=\"Range_istegi_ucretli_dosyanin_erisim_iznini_asabilir_mi\">Range iste\u011fi \u00fccretli dosyan\u0131n eri\u015fim iznini a\u015fabilir mi?<\/span><\/h3>\n<p>Range bir yetkilendirme y\u00f6ntemi de\u011fildir; yaln\u0131z hangi baytlar\u0131n istendi\u011fini belirtir. Do\u011fru kurulumda her par\u00e7a iste\u011fi de eri\u015fim kontrol\u00fcnden ge\u00e7er. WooCommerce gibi sistemlerde sat\u0131n alma hakk\u0131n\u0131 do\u011frulayan uygulama yolunu koruyun. Do\u011frudan dosya adresi veya payla\u015f\u0131lan \u00f6nbellek bu kontrol\u00fc atl\u0131yorsa yetkisiz eri\u015fim olu\u015fabilir; bu, Range deste\u011finden de\u011fil, eri\u015fim kontrol\u00fcndeki eksiklikten kaynaklan\u0131r.<\/p>\n<h2><span id=\"Yayina_almadan_once_son_kontrol_listesi\">Yay\u0131na almadan \u00f6nce son kontrol listesi<\/span><\/h2>\n<ul>\n<li><strong>K\u0131smi yan\u0131t:<\/strong> \u0130lk 1024 bayt\u0131 istedi\u011finizde <code>206<\/code> yan\u0131t\u0131, istenen aral\u0131\u011f\u0131 g\u00f6steren <code>Content-Range<\/code> ve 1024 baytl\u0131k g\u00f6vde ald\u0131\u011f\u0131n\u0131z\u0131 kontrol edin.<\/li>\n<li><strong>B\u00fct\u00fcnl\u00fck:<\/strong> Kald\u0131\u011f\u0131 yerden indirilerek tamamlanan <code>indirme.bin<\/code> ile kaynak dosyan\u0131n <code>sha256sum<\/code> de\u011ferlerini kar\u015f\u0131la\u015ft\u0131r\u0131n; iki de\u011fer ayn\u0131 olmal\u0131d\u0131r.<\/li>\n<li><strong>De\u011fi\u015fen dosya:<\/strong> E\u015fle\u015fmeyen <code>If-Range<\/code> g\u00f6nderdi\u011finizde dosyan\u0131n tamam\u0131n\u0131n <code>200<\/code> yan\u0131t\u0131yla d\u00f6nd\u00fc\u011f\u00fcn\u00fc ve gelen verinin eski par\u00e7aya eklenmedi\u011fini kontrol edin.<\/li>\n<li><strong>D\u0131\u015f u\u00e7:<\/strong> Kullan\u0131c\u0131ya a\u00e7\u0131k adresten ald\u0131\u011f\u0131n\u0131z k\u0131smi yan\u0131t\u0131n durum kodunu, aral\u0131\u011f\u0131n\u0131 ve g\u00f6vde boyutunu, ayn\u0131 dosya s\u00fcr\u00fcm\u00fc i\u00e7in kaynak sunucudan ald\u0131\u011f\u0131n\u0131z yan\u0131tla kar\u015f\u0131la\u015ft\u0131r\u0131n.<\/li>\n<li><strong>Eri\u015fim izni:<\/strong> Ge\u00e7erli eri\u015fim yetkisiyle indirmeyi s\u00fcrd\u00fcrebildi\u011finizi; yetkisiz veya s\u00fcresi dolmu\u015f ba\u011flant\u0131yla dosya verisinin al\u0131namad\u0131\u011f\u0131n\u0131 kontrol edin.<\/li>\n<\/ul>\n<p>Bu kontrollerin ard\u0131ndan kullan\u0131c\u0131lar\u0131n kulland\u0131\u011f\u0131 indirme adresinde, eri\u015fim hakk\u0131n\u0131z olan bir test dosyas\u0131n\u0131n indirmesini kontroll\u00fc bi\u00e7imde durdurup s\u00fcrd\u00fcr\u00fcn. Tamamlanan dosyan\u0131n sa\u011flama toplam\u0131n\u0131 kaynak dosyan\u0131nkiyle kar\u015f\u0131la\u015ft\u0131r\u0131n. B\u00f6ylece yaln\u0131z yerel \u00f6rne\u011fin de\u011fil, kullan\u0131c\u0131ya ula\u015fan indirme yolunun da do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kontrol etmi\u015f olursunuz.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Kesilen indirme yeniden ba\u015fl\u0131yorsa yaln\u0131z Accept-Ranges ba\u015fl\u0131\u011f\u0131na bakmak yetmez. Nginx ve curl ile k\u0131smi yan\u0131t\u0131, dosyan\u0131n kald\u0131\u011f\u0131 yerden s\u00fcrmesini ve b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc kontrol edin; sorunun sunucu, uygulama veya CDN katman\u0131nda oldu\u011funu ay\u0131r\u0131n.<\/p>\n","protected":false},"author":4,"featured_media":13343,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[236,706,704,705,503],"class_list":["post-13351","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji","tag-cdn","tag-curl","tag-http-range","tag-indirme-sorunlari","tag-nginx"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/13351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=13351"}],"version-history":[{"count":1,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/13351\/revisions"}],"predecessor-version":[{"id":13357,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/13351\/revisions\/13357"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/13343"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=13351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=13351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=13351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}