20 Ekim 2011 Perşembe

IIS'de static conent sunumu

IIS 7' de herhangi bir web site'da css, js ve image'lar için de cookie alışverişi yapılır. Özellikle Form Auth vs. gibi authantication yöntemlerinde veya state tutmak için cookie kullanıldığı durumlarda bu veri ciddi oranda büyük olur.
Ortalama bir sayfa isteğinde 50-100 arası dosya browser'a iner. Eğer cache vs gibi özellikler iyi tanımlanmamışsa her defasında bu gerçekleştirilir. Bu dosyalardan ilki static veya dinamik olsun sonuç olarak html'dir ve sonrakilerin büyük çoğunluğu image'dır. (Çöplüğe dönmüş [bir sürü farklı developerların çalıştığı] web site'larda java script ve css de çoktur.) Bu durumda ciddi oranda bir veri cookie alışveri üzerinden sunucu-istemci arasında gidip gelir.

Cookie alışverişini kapatmanın yolu IIS 7 için site özelliklerinden Session State'de bu özellikiği "Not Enabled" olarak ayarlamakdır. Fakat bu yapılınca o site için session tamamen kapatılır ve dinamik sayfalarda hem sunucu hem istemci tarafı state tutmak için işlevsiz hale gelir.




Bu durumda static content için zaten yapılması gereken örn: bir sub domain (yeni bir site) üzerinden static content sunumunu gerçekleştirmek.

Örneğin solution altında bulunan "Assets" dizini için static.xdomain.com adından yeni bir sub domain (yeni bir site) açılır.
O site için "Session Mode" iptal edilir bölyece cookie olayı iptal edilir.

Anahtar noktalar:

Bu sayede compression ve cache'de ayarlanabilir.

Böylece css ve bu css lerin üzerindeki image lar buradan sunulur.

Test için mevcut cookie ler silinmelidir ki yanılgıya düşürmesin.

Statik içeriği ayrı bir domain den sunarken css dosyalarını cache temizlenme problemi için kullanılan yöntem style.css?aaa vs şeklinde. Bu durumda netscaler gibi statik içerik proxy araçları bunları cache'lemek veya ziplemek durumunda mahrum kalıyor.
Buna alternatif çözüm static sub domain'i üzerinde Url route tanımı yapmak örn: static.domain.com/style-version.css. Bu da style.css yönlendirme yapar.

Kaynakça:


Static content in bulunduğu dizin için özel web.config oluşturmak. (Eğer static content mevcut web solution altında ise bazı module'leri disable (override) gerekiyor. Bunun içinde applicationHost.config de bazı değişiklikler yapmak gerekli. Yani shared hosting de pek mümkün değil.
http://www.robertsindall.co.uk/blog/creating-static-content-website-in-iis-7/

http://stackoverflow.com/questions/3060775/stopping-cookies-being-set-from-a-domain-aka-cookieless-domain-to-increase-si

Web config den ve iis manager dan cookiless domain yapmak (session kapatmak)
http://stackoverflow.com/questions/4105149/how-to-respect-serve-static-content-from-a-cookieless-domain-page-speed-rule-in