SGE Blog Yayınları

Http Range Başlığı Nedir

Http Range Başlığı Nedir

yazan Hasan Fatih Şimşek -
Number of replies: 0

Normalde bir http talebi yapıldığında hedef sunucudaki dökümanın (.html, .php, .jsp) tamamı yanıt olarak döner. Bu her zaman bu şekildedir. Ancak http talebinde Range header’ı kullanımı tercih edildiğinde hedef sunucudaki dökümanın bir parçası talep edilebilir. Gönderilen http talebindeki Range header’ı bazı aralık değerleri içerdiği durumda sunucu belirtilen parçayı yanıt olarak dönüyorsa status code olarak 206 (Partial Content) başarılı paketini döner. Yani “Kısmi İçerik” başarılı kodlu paket. Gönderilen http talebindeki Range header’ı yine bazı aralık değerleri içerdiği durumda sunucu belirtilen aralığı geçersiz değerde görüyorsa status code olarak 416 (Range Not Satisfiable) başarısız paketini döner. Yani “Aralık Karşılanabilir Değil” başarısız kodlu paket. Bazen de gönderilen http taleplerindeki Range başlığını sunucular görmezden gelir ve bütün dökümanı 200 OK durum koduyla gönderir.

Not: 

Http talebinde bir Range header’ı kullanımı ile bir defada hedef sunucudaki dökümanın birkaç parçası talep edilebilmektedir.

Http Request Range header’ı değer olarak birim bilgisi ve aralık değerleri alır. Aşağıda Range header’ının farklı kullanım şekilleri gösterilmiştir:

i)

Http Request:
...
...
Range: <unit>=<range-start>-         // Başlangıç byte bilgisi var ve son ise belirtilmediğinden
// aralık içeriğin en sonuna kadar inmekte ve bu içerik 
// talep edilmekte.
...


ii)

Http Request:
...
...
Range: <unit>=<range-start>-<range-end>            // Başlangıç ve son byte bilgisinin arasında 
... // kalan içerik talep edilmekte.


iii)

Http Request:
...
...
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end> // Birden fazla aralık 
...         // tanımlası ile bir 
        // defada birden fazla 
        // kısmi içerik
        // talep edilmekte.




iv)

Http Request:
...
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>, <range-start>-<range-end>
...                 // Birden fazla aralık 
...         // tanımlası ile bir 
        // defada birden fazla 
        // kısmi içerik
        // talep edilmekte. (2)


v)

Http Request:
...
...
Range: <unit>=-<suffix-length> // Belirtilen uzunluk bilgisi kadar içeriğin en 
// sonundan parça talep edilmekte.
...

Örnek bir kullanım;

Range: bytes:0-499, -500
         ^    ^      ^
         |     |      | birim ----     -----  ----  aralık değerleri

Yani 0ncı byte’tan (karakterden) 499ncu byte’a (karaktere) kadarki kısmı al ve sondan 500 byte’ı (karakteri) al.

Dolayısıyla belirtilen birim doğrultusunda decimal değerler o birime göre indis işaretlemesi yaparlar ve aralık ile kısmi içerik talep edilir.


Http Range başlığı ile Content-Length başlığı arasındaki fark nedir?

Content-Length başlığı gönderilen veya alınan paketin body’sindeki içeriğin karakter sayısı bilgisini tutar. Range başlığı spesifik içerik aralık değerleri tutar ve talep paketinde kullanılarak sunucudan dökümanın bir parçasını sadece göndermesini sağlar.

Content-Length:   Nature Bound limits. // for checksum control

Range:                   Variable Bound limits. // for specific part of a document

Content-Length header’ı üzerinde paket alışverişinin nizamından çıkarak manipulasyon yapıldığında gönderilen paketin tamamı yerine bir kısmı gönderilebilir veya alınan paketin tamamı yerine bir kısmı alınabilir. Fakat bu, Range başlığı gibi spesifik bir dökümandan parça seçimi yerine başlangıcın hep en baş olduğu ve sonun ise değişken olduğu (kısaltılabilir olduğu) bir tek seçimli parça talep etme olacaktır. Content-Length’i manipule etme ve avantaj sağlama sorusu farklı saldırılarda gözönüne alınabilir. 

Örneğin; saldırgan sunucuya sabit bir http response Content-Length header tanımlaması girebilir ve sunucudan dönen her web sayfası bozuk (eksik / yarım) geleceğinden web uygulama kullanıcılarının uygulamayı kullanma olanağı ellerinden alınabilir.


Yararlanılan Kaynaklar:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range

https://stackoverflow.com/questions/2773396/whats-the-content-length-field-in-http-header

https://sankhs.com/2016/03/17/content-length-http-headers/

476 kelime