Cross Domain Request için sunucu taraflı ASP.NET Proxy

0 dakikada yazıldı

11014 defa okundu

Düzenle

İstemci taraflı programlama sistemleri AJAX ile karşımıza çıkmıştı,
Silverlight ile beraber ise artık istemci taraflı programlama neredeyse
"hayatımız" oluyor. Bu durumda karşılaştığımız en büyük sorun
"Cross-Domain-Request" sınırlaması. Güvenlik nedenleriyle bir alan
adından bir başka alan adına bağlanarak veri talebinde bulunamıyoruz.
Eğer karşıdaki alan adının ihtiva ettiği siteye admin erişiminiz varsa
tabi ki farklı teknikler kullanarak bu sorunu çözebilirsiniz. Bu konuda
Silverlight 2.0 ile beraber
clientaccesspolicy.xmldosyası
geliyor.

Peki ya karşı siteye admin erişimimiz yoksa?

İşte o zaman kendi sitemizde sunucu taraflı bir proxy kullanmamız şart.
ASP.NET ile sunucu tarafından istediğimiz siteye bağlanarak istediğimiz
dosyası alabiliriz. Bu durumda bir ASPX sayfası yapsak bizim yerimize
gidip kendisine hedef gösterdiğimiz adresten gerekli dosyayı alıp
istemci tarafına, yani bize iletse hoş olmaz mı?

        Dim Talep As New
Net.WebClient

        Dim GelenVeri As Byte()
= Talep.DownloadData(Request.QueryString("Dosya"))

        Response.ContentType = Talep.ResponseHeaders("Content-type").ToString

        Response.OutputStream.Write(GelenVeri, 0,
GelenVeri.GetLength(0))

        Response.OutputStream.Close()

        Response.End()

Yukarıdaki kod içerisinde doğrudan bir WebClient yaratarak farklı
bir adresten veri indirme işlemi yapıyoruz. Kod içerisindeki en önemli
nokta indirmek istediğimiz hedef veri ile istemciye göndereceğimiz
verinin ContentType değerlerinin aynı olması gerektiği. Bunun için
Response.ContentType'ı WebClient üzerinden aldığımız Content-Type
header
bilgisi ile eşleştiriyoruz. Böylece proxy'miz gerektiğinde
video veya resim dosyalarını da rahatlıkla indirerek bize ulaştırabilir.

Performans?

Yukarıdaki örneğimiz çok basit bir yapıya sahip. Dosyayı sunucuya
indirerek doğrudan istemciye gönderiyor. Yüksek sayıda istek oluşan
projelerde veya büyük dosyalar indirecek olan uygulamalarında farklı
performans senaryoları uygulamak gerekecektir. Aslında baktığımızda bu
yapının herhangi bir Proxy programlamaktan pek farkı yok. Aklıma ilk
aşamada gelen dikkat edilmesi gereken noktalar şöyle oldu;

Hepinize kolay gelsin.