Hızlı özet
Kesilen indirme baştan başlıyorsa sunucu, dosyanın yalnızca kalan bölümünü isteyen isteğe uygun yanıt vermiyor olabilir. HTTP Range, dosyanın belirli bir bayt aralığını istemenizi sağlar; bayt, dosya boyutunu ölçen veri birimidir. İndirmeyi sürdürme desteğini kontrol etmek için küçük bir aralık isteyip gelen yanıtı inceleyin.
206 Partial Content, istenen bölümün kısmi yanıt olarak gönderildiğini belirtir.Content-Range, yanıtın dosyanın hangi baytlarını içerdiğini gösterir. Bu bilgiyi yanıt gövdesinin, yani gönderilen dosya verisinin boyutuyla birlikte kontrol edin.Accept-Rangesbaşlığı tek başına indirmeyi sürdürebileceğinizi kanıtlamaz.- Dosyanın değişmesi, indirme bağlantısının geçerlilik süresinin dolması veya aradaki önbellek katmanı devam isteğini etkileyebilir.
Büyük bir ZIP dosyası ya da dijital ürün indirirken bağlantı kesildiğinde, aynı veriyi tekrar indirmek zaman ve veri tüketir. Sorun her zaman tarayıcıda değildir: Dosyayı sunan uygulama veya isteği sunucuya ileten ara katman da indirmeyi başa döndürebilir.
Kontrole, canlı sitenizi değiştirmeden ayrı bir Ubuntu test sunucusunda başlayacaksınız. Önce dosyanın küçük bir bölümünü alacak, ardından indirmeyi kaldığı yerden sürdürecek ve tamamlanan dosyanın kaynakla aynı olduğunu kontrol edeceksiniz. Bu örnek, kendi sitenizdeki indirme yolunun çalıştığını tek başına kanıtlamaz; ancak sorunun dosya sunumunda mı, uygulamada mı, yoksa aradaki katmanda mı olduğunu ayırmak için kullanabileceğiniz bir kontrol yolu sunar.
İndirme neden başa döner, HTTP Range neyi değiştirir?
Bir ZIP dosyasının indirmesi kesildiğinde, o ana kadar indirilen bölüm bilgisayarınızda duruyor olabilir. Buna rağmen indirme sıfırdan başlayabilir: İndirmeyi yapan uygulama kalan bölümü istemiyor veya sunucu bu isteğe dosyanın tamamıyla yanıt veriyor olabilir. Nedeni ayırmak için yalnız indirme çubuğuna değil, gönderilen isteğe ve dönen yanıta bakmanız gerekir.
HTTP Range ile indirmeye devam etme, dosyanın tamamı yerine belirli bir bayt aralığını istemeye dayanır. Bayt, dosya boyutunu ölçmekte kullanılan veri birimidir. İstemci, yani indirmeyi yapan tarayıcı veya program, elindeki parçanın ardından gelen baytları isteyebilir. Bunun güvenli çalışması için bilgisayarınızdaki parçanın korunması, sunucunun aynı dosya sürümünü sunması ve aralık isteğini doğru karşılaması gerekir.
206, 200 ve 416 yanıtları ne anlatır?
İstek içindeki Range başlığı, alınmak istenen aralığı belirtir. Örneğin Range: bytes=0-1023, dosyanın ilk 1024 baytını ister. Konumlar sıfırdan başlar ve aralığın iki ucu da dahildir. Sunucu bu tek aralık isteğini karşılıyorsa 206 Partial Content, yani kısmi içerik yanıtı verir.
Content-Range yanıt başlığı, gönderilen bölümün dosyadaki yerini ve toplam boyutu gösterir. Örneğin 8388608 baytlık bir dosyanın ilk 1024 baytını istediğinizde Content-Range: bytes 0-1023/8388608 beklenir. Yanıt gövdesi, yani başlıklardan sonra taşınan dosya verisi, bu durumda 1024 bayt olmalıdır. 206 kodunu, aralık bilgisini ve gelen veri boyutunu birlikte kontrol edin. Böylece yalnız sunucunun destek bildirimine güvenmez, gerçekten istediğiniz parçanın döndüğünü kontrol edersiniz.
200 OK, isteğin başarılı olduğunu ancak kısmi yanıt verilmediğini gösterir. Bir dosya isteğinde bu genellikle dosyanın tamamının gönderildiği anlamına gelir. Sunucu Range başlığını dikkate almamış olabilir. İstemci bu yanıtı mevcut parçanın sonuna eklerse dosya bozulabilir; gelen veriyi kalan bölüm olarak değil, tam dosya olarak ele almalıdır.
416 Range Not Satisfiable, istenen aralığın karşılanamadığını belirtir. Örneğin başlangıç konumu dosyanın son baytını aşıyorsa bu yanıt beklenir. Sunucu Content-Range: bytes */8388608 ile mevcut toplam boyutu bildirebilir. Böyle bir yanıtta, bildirilen boyutu bilgisayarınızdaki parçanın boyutuyla karşılaştırın; dosya değişmiş veya yerel kopya zaten tamamlanmış olabilir. Bu yanıt tek başına Range desteğinin bozuk olduğunu göstermez. HTTP durum kodlarının anlamları, karşılaştığınız diğer yanıtları da yorumlamanıza yardımcı olur.
Accept-Ranges neden tek başına yeterli değildir?
Accept-Ranges: bytes, sunucunun bayt aralığı desteğini bildiren başlıktır; indirmeyi başarıyla sürdürebileceğinizin kanıtı değildir. Bu başlığın bulunmaması da aralık isteğinin mutlaka reddedileceği anlamına gelmez. Desteği sınamak için dosyanın belirli bir aralığını isteyip gelen parçayı kontrol etmeniz gerekir. Sonraki adımda bunu tek bir örnek dosya üzerinde, yanıt başlıklarını ve indirilen veri boyutunu birlikte inceleyerek yapabilirsiniz.
Örnek ortamı kurun ve kısmi yanıtı doğrulayın
Önce başka servisler araya girmeden Nginx’in dosyanın istenen bölümünü gönderip göndermediğini kontrol edin. Bu kontrol başarılı olduğunda, indirmeyi sürdürme denemesine geçebilirsiniz. Böylece dosya sunucusunun davranışını uygulama veya önbellek etkisinden ayrı incelemiş olursunuz.

Örnek senaryo
Sudo, yani yönetici yetkisiyle komut çalıştırma izni olan kullanıcınızla boş bir Ubuntu 24.04 test sunucusundasınız. Bütün komutları bu sunucunun terminalinde çalıştıracaksınız. Ayarlar tamamlandığında Nginx yalnız 127.0.0.1:8080 üzerinden, yani sunucunun kendi içinden erişilebilir olacak. Kullanacağınız dosya gerçek bir ZIP arşivi değil, rastgele üretilmiş 8388608 baytlık test verisidir.
Nginx’i kurun ve test dosyasını oluşturun
Nginx web sunucusu dosyayı sunacak; curl komut satırı aracı ise isteği gönderip yanıtı kaydedecek. Paket kurulumu varsayılan siteyi geçici olarak 80 numaralı bağlantı noktasında başlatabilir. Kuruluma geçmeden önce ağ güvenlik duvarında dışarıdan gelen web trafiğini kapalı tutun; terminal bağlantınız için gereken SSH erişimini kapatmayın.
Aşağıdaki komutlar Nginx’i kurup durdurur, başlangıç ayarlarını yedekler ve varsayılan siteyi devreden çıkarır. Ardından test dosyasını ve yanıtları kaydedeceğiniz çalışma klasörünü oluşturur. Bu adımları mevcut siteleri barındıran bir sunucuda değil, belirtilen boş test ortamında uygulayın.
sudo apt update
sudo apt install -y nginx curl
sudo systemctl stop nginx
sudo cp -a /etc/nginx /etc/nginx.range-demo.bak
sudo rm -f /etc/nginx/sites-enabled/default
sudo install -d -m 755 /srv/range-demo
sudo dd if=/dev/urandom of=/srv/range-demo/paket-v1.bin bs=1048576 count=8 status=progress
sudo chmod 644 /srv/range-demo/paket-v1.bin
mkdir -p /tmp/range-demo
cd /tmp/range-demoYedek komutunu ayarları değiştirmeden önce yalnız bir kez çalıştırın; /etc/nginx.range-demo.bak önceden varsa aynı komutu yeniden çalıştırmayın. Bu yedek, bölümün sonundaki geri alma adımlarında kullanılacak. Boş kurulumda varsayılan siteyi devreden çıkarmak dış adreslerdeki dinleyiciyi kaldırır. Dosyaya verilen okuma izni de Nginx’in test verisini sunmasını sağlar.
Yerel dosya sunucusunu ayarlayın
Aynı terminalde aşağıdaki komutu çalıştırarak /etc/nginx/conf.d/range-demo.conf dosyasını oluşturun. root, istenen dosyanın aranacağı klasörü belirler; burada az önce oluşturduğunuz test klasörünü kullanır. Nginx, diskte duran statik dosyalarda Range isteklerini işleyebilir; elle Accept-Ranges başlığı eklemeniz gerekmez.
sudo tee /etc/nginx/conf.d/range-demo.conf > /dev/null <<'EOF'
server {
listen 127.0.0.1:8080;
server_name localhost;
root /srv/range-demo;
gzip off;
location / {
try_files $uri =404;
}
}
EOF
sudo nginx -t && sudo systemctl start nginx
sudo systemctl reload nginxnginx -t çıktısında ayar testinin başarılı olduğunu görmelisiniz. Test hata verirse yeniden yükleme satırına geçmeyin; çıktıda belirtilen dosya ve satırı düzeltip ayar testini tekrarlayın. Başarılı başlangıcın ardından Nginx yerel adreste dosya isteklerini karşılayacaktır. Sıkıştırmanın kapalı olması, bu ilk kontrolde dosyanın doğrudan baytlarını incelemenizi sağlar.
İlk 1024 baytı GET isteğiyle doğrulayın
Aynı terminalde aşağıdaki komutları çalıştırın. Curl varsayılan olarak dosyanın içeriğini alan GET isteğini kullanır; yalnız başlık isteyen -I seçeneğini kullanmayın. Burada başlıklar ve gövde, yani yanıtla gelen dosya verisi, ayrı dosyalara kaydedilir. Son iki komut başlıkları ekrana yazdırır ve kaydedilen gövdenin bayt sayısını gösterir.
cd /tmp/range-demo
curl --silent --show-error --noproxy '*' \
-H 'Range: bytes=0-1023' \
-D ilk-basliklar.txt \
-o ilk-1024.bin \
http://127.0.0.1:8080/paket-v1.bin
cat ilk-basliklar.txt
wc -c ilk-1024.bin--noproxy '*', ortamda tanımlı bir ara sunucunun bu yerel teste karışmasını önler. Çıktınızda aşağıdaki durum kodunu, başlık değerlerini ve dosya boyutunu arayın. Bunlar yapılmış bir ölçüm değil, örnek ortamda beklenen değerlerdir; yanıtta başka başlıklar da bulunabilir:
HTTP/1.1 206 Partial Content
Content-Length: 1024
Content-Range: bytes 0-1023/8388608
1024 ilk-1024.bin404 görürseniz önce ls -l /srv/range-demo/paket-v1.bin ile dosyanın beklenen yerde bulunduğunu kontrol edin. Dosya yoksa oluşturma adımını, varsa istekteki dosya adıyla sunucu ayarındaki klasörü karşılaştırın. 200 görürseniz sudo nginx -T çıktısında 8080 dinleyicisinin örnek sunucu bloğuna ait olduğunu kontrol edin ve max_ranges 0; gibi aralık işlemeyi kapatan bir ayarı arayın. Yalnız belirlediğiniz nedeni düzeltin; ayar değiştiyse ayar testinden sonra Nginx’i yeniden yükleyin. Aynı GET isteğini tekrarladığınızda durum kodu, aralık ve gövde boyutu birlikte beklenen değerlerle eşleşmelidir.
Sonraki sürdürme denemesi için ortamı şimdilik koruyun. Bütün testleri bitirdiğinizde aşağıdaki komutlar örnek sunucu ayarını kaldırıp yedeklediğiniz başlangıç ayarlarını geri getirir. Bu işlem varsayılan siteyi de yeniden etkinleştireceğinden, dışarıdan gelen web trafiğine uyguladığınız güvenlik duvarı kısıtını koruyun:
sudo rm /etc/nginx/conf.d/range-demo.conf
sudo cp -a /etc/nginx.range-demo.bak/. /etc/nginx/
sudo nginx -t && sudo systemctl reload nginxKalan baytları indirin ve dosya bütünlüğünü kontrol edin
İlk parçayı kaydedip aynı dosyaya devam edin
Aynı test sunucusunun terminalinde, dosyanın ilk 1048576 baytını alarak yarım kalmış bir indirmeyi temsil eden parça oluşturun. Aşağıdaki komutlar yalnız örnek istemci dosyası indirme.bin üzerine yazar; kaynak dosyayı değiştirmez. Önceki kontrolden kalan 1024 baytlık dosya yerine bu daha büyük parçayla sürdürmeyi deneyeceksiniz.
cd /tmp/range-demo
curl --silent --show-error --noproxy '*' \
-H 'Range: bytes=0-1048575' \
-D parca-basliklar.txt -o indirme.bin \
http://127.0.0.1:8080/paket-v1.bin
cat parca-basliklar.txt
wc -c indirme.binDevam etmeden önce başlıklarda 206 ve Content-Range: bytes 0-1048575/8388608, boyut çıktısında ise 1048576 bayt görmelisiniz. Yanıttaki ETag, sunucunun dosya sürümünü ayırt etmek için verdiği doğrulayıcı değerdir. If-Range başlığıyla bu değeri gönderdiğinizde, kalan bölümün yalnız doğrulayıcı hâlâ eşleşiyorsa gönderilmesini istersiniz. Aşağıdaki komut, kaydettiğiniz başlıklardan bu değeri alıp ekrana yazdırır:
etag=$(awk 'tolower($1)=="etag:" {sub(/\r$/, ""); print $2; exit}' parca-basliklar.txt)
printf '%s\n' "$etag"Bu Nginx örneğinde çift tırnaklı bir değer beklenir; tırnakları koruyun. Değer boşsa veya bayt düzeyinde eşitlik güvencesi vermeyen zayıf doğrulayıcı işareti W/ ile başlıyorsa bu ETag ile If-Range testine geçmeyin. Uygun değeri aldıysanız aşağıdaki komutlarla önce başlangıç parçasının kopyasını saklayın, ardından indirmeyi sürdürün:
cp indirme.bin ilk-parca.bin
curl --silent --show-error --noproxy '*' \
-C - -H "If-Range: $etag" \
-D devam-basliklar.txt -o indirme.bin \
http://127.0.0.1:8080/paket-v1.bin
cat devam-basliklar.txt
wc -c indirme.bin
sha256sum /srv/range-demo/paket-v1.bin indirme.bin-C -, devam edilecek konumu yerel dosyanın boyutundan hesaplar. Beklenen yanıt 206 ve Content-Range: bytes 1048576-8388607/8388608; tamamlanan dosyanın boyutu ise 8388608 bayttır. Bu değerler, sunucunun ilk parçadan sonraki bölümü gönderdiğini gösterir.
İçeriğin de doğru birleştiğini son komutla kontrol edersiniz. SHA-256 sağlama toplamı, dosya içeriğinden hesaplanan özettir; çıktının iki satırının başındaki değerler aynı olmalıdır. Fark varsa dosyayı kullanmayın. Başlıkları ve boyutu incelemek üzere cp ilk-parca.bin indirme.bin ile başlangıç parçasına dönebilirsiniz.
Sürüm uyuşmazlığını güvenli biçimde sınayın
Dosya değişip doğrulayıcı artık eşleşmediğinde sunucu aralık isteğini dikkate almaz ve tam dosyayı 200 ile gönderir. Aynı terminalde, kaynağı değiştirmeden bilerek farklı bir ETag göndererek bu davranışı sınayın:
curl --silent --show-error --noproxy '*' \
-H 'Range: bytes=1048576-' \
-H 'If-Range: "eslesmeyen-deneme"' \
-D uyusmazlik-basliklar.txt -o /dev/null \
http://127.0.0.1:8080/paket-v1.bin
cat uyusmazlik-basliklar.txtBurada 200 beklenir; komut yanıt gövdesini mevcut parçaya eklemeden atar. Gerçek sürdürmede böyle bir yanıt alırsanız eski parçayla yeni sürümü birleştirmeyin. Tam dosyayı ayrı bir dosyaya baştan indirin.
Dosya sınırını aşan isteği kontrol edin
Son baytın konumu 8388607 olduğundan, 8388608 konumundan başlayan bir aralık dosyanın dışında kalır. Sunucunun bu isteği nasıl karşıladığını görmek için aynı terminalde aşağıdaki komutları çalıştırın:
curl --silent --show-error --noproxy '*' \
-H 'Range: bytes=8388608-' \
-D sinir-basliklar.txt -o /dev/null \
http://127.0.0.1:8080/paket-v1.bin
cat sinir-basliklar.txtBeklenen 416 ve Content-Range: bytes */8388608, bu kontrollü denemede sunucunun dosya sınırını doğru uyguladığını gösterir; sürdürme desteğinin bozuk olduğu anlamına gelmez. Böylece başarılı sürdürmenin yanında, geçersiz başlangıç konumunun reddedildiğini ve mevcut toplam boyutun bildirildiğini de kontrol etmiş olursunuz.
Proxy, CDN ve uygulama katmanında sorunu ayırın
Kaynak sunucuyla dış uçtan aynı parçayı isteyin
Yerel test başarılıysa Nginx’in örnek dosyada indirmeyi sürdürebildiğini bilirsiniz; ancak kullanıcıya açık indirme yolunu henüz kontrol etmiş olmazsınız. Proxy, istekleri kaynak sunucuya ileten ara sunucudur. CDN ise içeriği farklı noktalardan sunan içerik dağıtım ağıdır. Kaynak sunucunun yanıtını kullanıcıya açık adresin yanıtıyla karşılaştırarak sorunun bu katmanlarda olup olmadığını daraltabilirsiniz.

Örnek ortamda CDN yoktur; 127.0.0.1:8080 dışarıya açık değildir. Aşağıdaki karşılaştırmayı yalnız yönettiğiniz mevcut bir HTTPS indirme adresinde yapın. Kaynağa doğrudan erişim izniniz ve kaynak sunucuda alan adı için geçerli bir sertifika bulunmalıdır. Test sunucusunun Bash terminalinde sırasıyla tam HTTPS indirme adresini, yalnız alan adını ve kaynak sunucunun IP adresini girin. Aynı sürümü sunulan, en az 1024 baytlık bir test dosyası seçin:
cd /tmp/range-demo
read -r -p 'HTTPS indirme adresi: ' url
read -r -p 'Adresteki alan adı: ' alan
read -r -p 'Kaynak sunucunun IP adresi: ' kaynak_ip
curl --silent --show-error --noproxy '*' \
-H 'Range: bytes=0-1023' -H 'Accept-Encoding: identity' \
-D dis-basliklar.txt -o dis-parca.bin "$url"
curl --silent --show-error --noproxy '*' \
--resolve "${alan}:443:${kaynak_ip}" \
-H 'Range: bytes=0-1023' -H 'Accept-Encoding: identity' \
-D kaynak-basliklar.txt -o kaynak-parca.bin "$url"
cat dis-basliklar.txt kaynak-basliklar.txt
wc -c dis-parca.bin kaynak-parca.binİlk istek kullanıcıya açık adrese gider. İkinci istekte --resolve, alan adını ve TLS sertifika kontrolünü, yani güvenli bağlantıdaki sunucu kimliği doğrulamasını koruyarak bağlantıyı kaynak IP’sine gönderir. Komutlar standart 443 portunu varsayar ve sunucudan sıkıştırılmamış içerik ister. Aynı dosya sürümünde iki tarafta da 206, aynı Content-Range ve 1024 baytlık gövde bekleyin.
Bu komutlar yönlendirmeleri otomatik izlemez ve tarayıcı oturumunuzu kullanmaz. Yönlendirme varsa yanıtın Location başlığındaki hedefi inceleyin; oturum açma sayfasını dosya sanmayın. Kaynağa erişilemiyorsa güvenlik duvarını dışarıya açmak yerine karşılaştırmayı kaynak erişimine izin verilen ağdan yapın.
Başlık, önbellek ve sıkıştırma farkını daraltın
Kaynak 206, dış uç 200 veriyorsa önce iki yanıtın da beklediğiniz dosyaya ait olduğundan emin olun. Ardından ara katmanın kaynağa gönderdiği istekte Range ve sürdürme sırasında If-Range bulunup bulunmadığını kontrol edin. Nginx ara sunucusunda sudo nginx -T çıktısında bu başlıkları boşaltan proxy_set_header satırlarını veya proxy_pass_request_headers off ayarını arayın.
Böyle bir ayar bulursanız bulunduğu dosyanın yedeğini alın ve yalnız ilgili indirme yolundaki başlık aktarımını düzeltin. nginx -t başarılıysa ayarları yeniden yükleyip kaynak ve dış uç isteklerini tekrarlayın. Beklenen değişiklik, dış uçta da doğru aralık ve gövde boyutuyla kısmi yanıt alınmasıdır. Değişiklik işe yaramazsa veya başka bir sorun çıkarırsa yedek dosyayı geri koyun, ayar testinden sonra yeniden yükleyin.
İlk istekle sonraki isteğin yanıtı farklıysa CDN panelinde test dosyasının önbellekten sunulup sunulmadığına bakın. Yalnız bu dosyanın önbelleğini temizleyip aynı isteği iki kez tekrarlayın. Davranış önbellek dolunca değişiyorsa ilgili indirme yolunun aralık istekleri ve kısmi yanıtlar için ayarlarını inceleyin; değişiklikten önce mevcut değerleri kaydedin.
Content-Encoding, yanıta uygulanan sıkıştırmayı belirtir. İki yanıtta bu başlık farklıysa aynı dosyanın sıkıştırılmış ve sıkıştırılmamış biçimlerini karşılaştırıyor olabilirsiniz. Yalnız indirme yolundaki sıkıştırmayı veya içerik dönüşümünü kapatarak aynı karşılaştırmayı yenileyin. Site genelindeki sıkıştırmayı kapatmayın; fark düzelmezse kaydettiğiniz ayarlara dönün.
PHP ve süreli bağlantıları ayrı kontrol edin
Statik dosyanın indirmesi kaldığı yerden sürüyor, PHP üzerinden indirme ise başa dönüyorsa aynı erişim yetkisiyle uygulamaya da aralık isteği gönderip yanıtı karşılaştırın. PHP’de yalnız readfile() kullanılması aralık desteği sağlamaz. Yetkilendirmeyi uygulamada tutup dosya aktarımını Nginx’e devretmek bir seçenektir. Bunun için dışarıdan doğrudan erişimi engelleyen internal konumu ve uygulamanın Nginx’e aktarım yolunu bildirdiği X-Accel-Redirect başlığı birlikte kullanılabilir. Ücretli dosyayı herkese açık klasöre taşımak bu çözümün yerine geçmez.
Devam isteği 403 veya oturum sayfasına yönlendirme alıyorsa önce bağlantının geçerlilik süresini ve oturumun hâlâ geçerli olup olmadığını kontrol edin. Bu yanıtlar, aralık desteğinden önce erişim iznini araştırmanız gerektiğini gösterir; tek başına bağlantının süresinin dolduğunu kanıtlamaz. Yeni yetkili bağlantıda dosya sürümünü ve ETag doğrulayıcısını ilk parçanın yanıtıyla karşılaştırın. Bağlantının yenilenmesi tek başına eski parçaya güvenle ekleme yapılabileceğini göstermez.
Sık Sorulan Sorular
İndirmeyi sürdürebilmek için HTTP/3 gerekli mi?
Hayır. HTTP Range ile indirmeyi sürdürme, HTTP/1.1 ve HTTP/2 ile de çalışır. HTTP/3’e geçmeniz, uygulamanın eksik aralık desteğini düzeltmez. HTTP/3 protokolünün performansa etkileri bağlantı koşullarına göre değişebilir; indirmeyi kaldığı yerden sürdürmek içinse indirme programının kalan aralığı istemesi ve sunucunun bu isteği doğru karşılaması gerekir.
Sunucu destekliyorsa her tarayıcı indirmeye devam eder mi?
Hayır. Tarayıcının indirmeyi sürdürebilmesi; sürümüne, indirme kaydının ve yerel parçanın korunmasına, dosyaya erişimin hâlâ geçerli olmasına bağlıdır. Siz bağlantıyı yeniden tıkladığınızda mevcut işlem yerine yeni bir indirme başlayabilir. Önce tarayıcının indirmeler listesindeki Devam et seçeneğini kullanın; bu seçenek her kesinti türünde sunulmayabilir. Güvenli sürdürme için sunulan dosyanın da aynı sürümde olması gerekir.
Paralel indirme her zaman daha hızlı mı?
Hayır. Paralel indirme, dosyanın farklı aralıklarını eşzamanlı isteklerle alır. Hız yalnız bağlantı başına sınırlanıyorsa yarar sağlayabilir; kullanılabilir toplam bant genişliği zaten doluysa hız kazandırmayabilir. Fazla istek, sunucunun izin verdiği istek sayısını da aşabilir. İndirme yöneticinizde önce tek parçayla, ardından az sayıda eşzamanlı parçayla aynı dosyayı deneyin; parça sayısını artırmadan önce aktarım hızını ve oluşan hataları karşılaştırın.
Range isteği ücretli dosyanın erişim iznini aşabilir mi?
Range bir yetkilendirme yöntemi değildir; yalnız hangi baytların istendiğini belirtir. Doğru kurulumda her parça isteği de erişim kontrolünden geçer. WooCommerce gibi sistemlerde satın alma hakkını doğrulayan uygulama yolunu koruyun. Doğrudan dosya adresi veya paylaşılan önbellek bu kontrolü atlıyorsa yetkisiz erişim oluşabilir; bu, Range desteğinden değil, erişim kontrolündeki eksiklikten kaynaklanır.
Yayına almadan önce son kontrol listesi
- Kısmi yanıt: İlk 1024 baytı istediğinizde
206yanıtı, istenen aralığı gösterenContent-Rangeve 1024 baytlık gövde aldığınızı kontrol edin. - Bütünlük: Kaldığı yerden indirilerek tamamlanan
indirme.binile kaynak dosyanınsha256sumdeğerlerini karşılaştırın; iki değer aynı olmalıdır. - Değişen dosya: Eşleşmeyen
If-Rangegönderdiğinizde dosyanın tamamının200yanıtıyla döndüğünü ve gelen verinin eski parçaya eklenmediğini kontrol edin. - Dış uç: Kullanıcıya açık adresten aldığınız kısmi yanıtın durum kodunu, aralığını ve gövde boyutunu, aynı dosya sürümü için kaynak sunucudan aldığınız yanıtla karşılaştırın.
- Erişim izni: Geçerli erişim yetkisiyle indirmeyi sürdürebildiğinizi; yetkisiz veya süresi dolmuş bağlantıyla dosya verisinin alınamadığını kontrol edin.
Bu kontrollerin ardından kullanıcıların kullandığı indirme adresinde, erişim hakkınız olan bir test dosyasının indirmesini kontrollü biçimde durdurup sürdürün. Tamamlanan dosyanın sağlama toplamını kaynak dosyanınkiyle karşılaştırın. Böylece yalnız yerel örneğin değil, kullanıcıya ulaşan indirme yolunun da doğru çalıştığını kontrol etmiş olursunuz.





