Apache HTTP Sunucusu Sürüm 2.2
İçerik Uzlaşımı
Apache, içerik uzlaşımını HTTP/1.1 belirtiminde bahsedildiği şekliyle destekler. Bir özkaynağın en iyi gösterimini, tarayıcının sağladığı karakter kodlaması, karakter kümesi, dil, ortam türü gibi kullanıcı tercihlerine bağlı olarak seçebilir. Ayrıca, tarayıcının kullanıcı tercihlerini tam yansıtamadığı durumlarda istekleri daha akıllıca ele alabilmeyi sağlayacak bir takım özelliklere de sahiptir.
İçerik uzlaşımı öntanımlı olarak derlenen
mod_negotiation
modülü tarafından sağlanır.
İçerik Uzlaşımı Hakkında
Bir özkaynağın bir çok farklı gösterimi olabilir. Örneğin, bir belgenin farklı ortam türleri ve/veya farklı diller için gösterimleri olabilir. En uygun seçimi yapmanın tek yolu kullanıcıya bir liste verip seçmesini istemektir. Bununla birlikte sunucunun bu seçimi kendiliğinden yapması da mümkündür. Tarayıcılar isteğin bir parçası olarak kullanıcı tercihlerini de gönderdiğinden bu istendiği gibi çalışır. Örneğin bir tarayıcı, kullanıcısınının mümkünse Fransızca içerik tercih ettiğini yoksa İngilizce içeriğe de razı olabileceğini belirtebilirdi. Tarayıcılar bu tercihleri başlıkta belirtirler. Tarayıcı sadece Türkçe içerik istendiğini şöyle belirtebilirdi:
Accept-Language: tr
Bu tercihin yerine getirilebilmesininin sadece, desteklenen diller arasında bu dilin varlığına ve istenen belgenin bu dilde bir gösteriminin bulunmasına bağlı oluşuna dikkat ediniz.
Daha karmaşık bir istek örneği olarak, tarayıcının Fransızca ve İngilizce içerik kabul etmeye ayarlandığını fakat Fransızcayı tercih ettiğini ve çeşitli ortam türlerini kabul etmekle birlikte salt metin ve diğer metin türlerinden ziyade HTML tercih ettiğini, ayrıca, diğer ortam türleri üzerinde GIF veya JPEG tercih ettiğini fakat başka çare yoksa her ortam türüne de izin verdiğini belirtiyor olsun:
Accept-Language: fr; q=1.0, en; q=0.5
Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg;
q=0.6, image/*; q=0.5, */*; q=0.1
Apache, HTTP/1.1 belirtiminde tanımlanan şekliyle ‘sunucu yönetiminde’
içerik uzlaşımını destekler. Accept
,
Accept-Language
, Accept-Charset
ve
Accept-Encoding
istek başlıklarını tamamen destekler.
Apache ayrıca, RFC 2295 ve RFC 2296’da tanımlanan bir deneysel uzlaşım
olarak ‘şeffaf’ içerik uzlaşımını da destekler. Fakat ‘özellik
uzlaşımını’ bu RFC’lerde tanımlandığı gibi desteklemez.
Bir özkaynak bir URI (RFC 2396) tarafından betimlenen kavramsal bir öğedir. Apache gibi bir HTTP sunucusu, ortam türü, karakter kümesi, kodlama ve saire ile tanımlanmış bir bayt dizisi şeklindeki her gösterimiyle, özkaynaklara kendi isim alanları dahilinde erişim sağlar. Her özkaynağın aynı anda bir veya daha fazla gösterimi mevcut olabileceği gibi hiç mevcut olmayabilir de. Eğer çok sayıda gösterim mevcutsa, bu özkaynağın uzlaşılabilir olduğundan ve her gösteriminin bir çeşitlilik oluşturduğundan bunun da uzlaşımın boyutlarından kaynaklandığından bahsedilebilir.
Apache’de İçerik Uzlaşımı
Bir özkaynak üzerinde uzlaşılırken gösterim çeşitlerinin her biri hakkında sunucuya bilgi verilmesi gerekir. Bu iki yolla yapılabilir:
- Ya gösterim çeşitlerini içeren dosyaların isimleriyle eşleşmeyi
sağlayan bir tür eşlemi kullanılır (bir
*.var
dosyası gibi). - Ya da sunucu örtük bir dosya ismi kalıbı eşleşmesinin ardından sonuçlar arasından seçim yapar; buna ‘Çoklu Görünüm’ araması adı verilir.
Bir türeşlem dosyası kullanmak
Bir türeşlem dosyası, type-map
eylemcisi ile ilişkili bir
belgedir (ya da eski Apache yapılandırmaları ile geriye uyumluluk için,
application/x-type-map
MIME türünde
bir belgedir). Bu özelliği kullanmak için, yapılandırmada bir tür
eşleyici olarak her dosya ismi uzantısı için bir type-map
eylemcisi tanımlamalısınız. Bu, sunucu yapılandırma dosyasında en iyi
şöyle yapılabilir:
AddHandler type-map .var
Türeşlem dosyaları kendilerini tanımlayan özkaynak ile aynı isimde
olmalı ve her gösterim çeşidi için bir girdi içermelidir; bu girdiler
ardarda belirtilen HTTP biçem başlık satırlarından oluşur. Farklı
gösterimlerin girdileri bir boş satırla diğerlerinden ayrılır. Aynı
girdi içinde boş satır kullanılamaz. Bir eşlem dosyasını bir birleşik
öğenin tamamı için bir girdi ile başlatmak adet olmuştur (ise de, bu
gerekli değildir, hele yoksayılacaksa hiç gerekli değildir). Eşlem
dosyası için aşağıda bir örnek verilmiştir. Dosya misal
isimli bir özkaynak hakkında olduğundan dosyaya misal.var
ismi verilebilir.
URI: misal
URI: misal.en.html
Content-type: text/html
Content-language: en
URI: misal.fr.de.html
Content-type: text/html;charset=iso-8859-2
Content-language: fr, de
Ayrıca, MultiViews
etkin olsa bile bir türeşlem dosyasının
dosya ismi uzantılarının taranmasına göre öncelik alacağına dikkat
ediniz. Eğer gösterimler bu örnekteki resim dosyasında olduğu gibi
farklı kaynak üstünlüklerine sahipseler, ortam türünün qs
parametresi kullanılarak kaynak üstünlükleri belirtilebilir:
URI: misal
URI: misal.jpeg
Content-type: image/jpeg; qs=0.8
URI: misal.gif
Content-type: image/gif; qs=0.5
URI: misal.txt
Content-type: text/plain; qs=0.01
qs
değerleri 0.000-1.000 değer aralığı içinde
belirtilebilir. 0.000 qs
değerine sahip gösterimin asla
seçilmeyeceğine dikkat ediniz. Bir qs
değeri belirtilmeyen
gösterimlerin kaynak üstünlüğü 1.000 kabul edilir. qs
parametresinin belirttiği değer istemcinin yeteneklerinden bağımsız
olarak olası gösterimler arasında göreli bir üstünlük ifade eder.
Örneğin bir fotoğraf sözkonusu olduğunda bir JPEG dosyasının kaynak
üstünlüğü bir ASCII çiziminkinden yüksek olacaktır. Diğer taraftan özgün
resim bir ASCII çizim olduğu takdirde, ASCII çizim, bir JPEG gösterimine
göre öncelikli olacaktır. Bu nedenle qs
değeri özkaynağın
doğasına bakarak belirlenir.
Tanınan başlıkların tam listesini mod_negotiation modülünün belgesinde bulabilirsiniz.
Çoklu Görünümler
MultiViews
, httpd.conf
dosyasındaki veya
(AllowOverride
yönergesinin
değerine bağlı olarak) .htaccess
dosyalarındaki <Directory>
, <Location>
veya <Files>
bölümleri içinde
Options
yönergeleri ile
belirtilebilen, dizine özgü bir seçenektir. Yalnız, dikkatli olun,
Options All
yaparak MultiViews
seçeneğini
etkin kılamazsınız; seçeneği ismiyle açıkça belirtmelisiniz.
MultiViews
şöyle etki eder: Sunucudan,
MultiViews
seçeneğinin etkin olduğu /bir/dizin
dizininden filanca
dosyası için bir istekte bulunulmuşsa
fakat dizinde bu dosya yoksa, sunucu dizin içeriğini
filanca.*
dosyaları için tarar ve bu dosyalar için
istemcinin ismiyle talep ettiği ortam türlerini ve kodlamaları
kullanarak bir türeşlem dosyası uydurup bu gösterimler arasından
istemcinin gereksinimlerine en uygun gösterimi seçer.
MultiViews
ayrıca, sunucunun bir dizin içeriğini
listelemeye çalıştığı durumda DirectoryIndex
yönergesi ile belirtilen dosya için de bir
arama tertipleyebilir. Eğer yapılandırma dosyalarında
DirectoryIndex index
şeklinde bir atama varsa ve dizinde index.html
ve
index.html3
dosyaları varsa sunucu bunlar arasından hakem
sıfatıyla bir seçim yapacaktır; ama bu ikisi yerine dizinde sadece
index.cgi
mevcutsa sunucu sadece bu dosyayı
çalıştıracaktır.
Okunan dizinde bulunan dosyalar arasında mod_mime
tarafından tanınan karakter kümesi, içerik türü, dil ve kodlama
başlıklarına uygun gösterim uzantılarından birine sahip bir dosya yoksa
sonuç MultiViewsMatch
yönergesiyle yapılan tanıma bağlı olur. Bu yönerge hangi diğer dosya
uzantılarının, eylemcilerin veya süzgeçlerin çok gösterimli uzlaşımla
ilintileneceğini belirler.
Uzlaşım Yöntemleri
Apache’nin, bir türeşlem dosyası veya dizin içindeki bir dosya sayesinde belli bir özkaynağın gösterim çeşitlerinin bir listesini elde ettikten sonra ‘en uygun’ gösterime karar vermek için kullanabileceği iki yöntem vardır. Apache’nin içerik uzlaşım özelliklerinin kullanımı sırasında uzlaşımın nasıl yerine getirileceği ile ilgili ayrıntıları bilmek aslında gerekli değildir. Bununla birlikte belgenin kalanında bu konu açıklanmaya çalışılmıştır.
İki uzlaşım yöntemi vardır:
- Normal durumda sunucu yönetiminde Apache uzlaşım algoritması kullanılır. Bu algoritma aşağıda ayrıntılı olarak açıklanmıştır. Bu algoritma kullanıldığı zaman, Apache, en iyi sonuca ulaşmak için bazen belli boyutların üstünlük katsayılarıyla ‘oynar’. Apache’nin bu katsayılarla oynama işini nasıl yaptığı aşağıda daha ayrıntılı açıklanmıştır.
- İstemci bu işlem için özellikle RFC 2295’te tanımlanan mekanizmanın kullanılmasını isterse şeffaf içerik uzlaşımı kullanılır. Bu uzlaşım yöntemi, en uygun gösterimin seçilmesi konusunda tarayıcıya tam denetim imkanı verir; dolayısıyla sonuç tarayıcının bu işlem için kullandığı algoritmanın başarısına bağlıdır. Şeffaf uzlaşım sürecinin bir parçası olarak, tarayıcı, RFC 2296’da tanımlanan ‘gösterim çeşidini uzaktan seçme algoritması’nın çalıştırılmasını Apache’den isteyebilir.
Uzlaşımın Boyutları
Boyut | Açıklama |
---|---|
Ortam Türü | Tarayıcı ortam türü tercihlerini Accept başlık alanı
ile belirtir. Her öğenin kendine özgü bir üstünlük katsayısı
olabilir. Gösterimin açıklaması da ayrıca bir kaynak üstünlüğüne
(qs parametresi) sahip olabilir. |
Dil | Tarayıcı dil tercihlerini Accept-Language başlık
alanı ile belirtir. Her öğenin kendine özgü bir üstünlük katsayısı
olabilir. Gösterimler bir kaç dilde olabileceği gibi hiç bir dille
ilişkilendirimemiş de olabilir. |
Kodlama | Tarayıcı kodlama tercihlerini Accept-Encoding başlık
alanı ile belirtir. Her öğenin kendine özgü bir üstünlük katsayısı
olabilir. |
Karakter Kümesi | Tarayıcı karakter kümesi tercihlerini Accept-Charset
başlık alanı ile belirtir. Her öğenin kendine özgü bir üstünlük
katsayısı olabilir. Gösterim çeşitleri karakter kümesini ortam
türünün bir parametresi olarak belirtebilirler. |
Apache Uzlaşım Algoritması
Apache, tarayıcıya döndürülecek en uygun gösterim çeşidini (varsa) seçmek için aşağıdaki algoritmayı kullanabilir. Bu algoritma pek de yapılandırılabilir değildir. Şöyle çalışır:
- Önce her uzlaşım boyutu için ilgili Accept* başlık alanına bakılıp her gösterim çeşidine bir üstünlük katsayısı atanır. Eğer boyutlardan bazıları için ilgili Accept* başlığı uygulanabilir değilse bu boyut elenir ve sonuçta hiçbir gösterim çeşidi kalmasza 4. adıma atlanır.
- ‘En uygun’ gösterim çeşidi bir eleme süreciyle seçilir. Bu süreç
sırasında aşağıdaki sınamalar sırayla uygulanır. Sınamalardan
geçemeyen bir gösterim çeşidi elenir. Sınamaların bir aşamasında tek
bir gösterim çeşidi kalırsa bu en uygun eşleşme olarak seçilmiş olur
ve 3. adıma atlanır. Eğer birden fazla gösterim çeşidi kalırsa sonraki
sınamaya geçilir.
Accept
başlığındaki üstünlük katsayısı ile gösterimin ortam türünde belirtilen kaynak üstünlüğünün çarpımı en büyük olan gösterim çeşidi seçilir.- En yüksek dil üstünlük katsayısına sahip gösterim çeşidi seçilir.
- En uygun dil eşleşmesine sahip gösterim çeşidini seçmek için
önce varsa
Accept-Language
başlığındaki dil sıralamasına bakılır, aksi takdirdeLanguagePriority
yönergesi ile atanmışsa oradaki dil sıralamasına bakılır. - En yüksek ‘seviyeden’ ortam parametresine (text/html ortam türü sürümünü belirtmekte kullanılır) sahip gösterim çeşitleri seçilir.
Accept-Charset
başlık satırında belirtilene bakarak en uygun karakter kümesine sahip gösterim çeşitleri seçilir. Alenen dışlanmadıkça ISO-8859-1 kabul edilebilir karakter kümesidir.text/*
ortam türüne sahip gösterim çeşitlerinden belli bir karakter kümesi ile ilişkilendirilmemiş olanların karakter kümesinin ISO-8859-1 olduğu varsayılır.- ISO-8859-1 karakter kümesi ile ilişkilendirilmemiş gösterim çeşitleri seçilir. Böyle hiçbir gösterim yoksa bütün gösterimler seçilir.
- En uygun kodlamaya sahip gösterim çeşitleri seçilir. Tarayıcı tarafından kabul edilebilir kodlamaya sahip gösterim çeşitleri varsa bunlar seçilir. Yoksa kodlanmış ve kodlanmamış gösterim çeşitleri karışık olarak mevcutsa sadece kodlanmamış olanlar seçilir. Eğer bütün gösterim çeşitlerinin sadece kodlanmış ya da sadece kodlanmamış gösterimleri mevcutsa hepsi seçilir.
- En küçük içerik uzunluğuna sahip gösterim çeşitleri seçilir.
- Kalan gösterim çeşitlerinin ilki seçilir. Bu ilk, ya türeşlem dosyasında listelenen ilk çeşittir ya da gösterimler bir dizinden okunuyorsa ASCII kod sıralamasına göre ilk sıradaki dosya ismine sahip gösterimdir.
- Algoritma, artık seçilmiş en uygun gösterim çeşidine sahipse bu
artık yanıt olarak döndürülebilir. HTTP yanıt başlığı
Vary
’ye uzlaşım boyutları atanır (tarayıcı ve arabellekler özkaynağı kaydederken bu bilgiyi kullanırlar) ve algoritma sonlandırılır. - Buraya gelinmişse hiçbir gösterim seçilmemiş demektir (hiçbiri
tarayıcı tarafından kabul edilebilir bulunmadığından dolayı).
Gövdesinde mevcut gösterim çeşitlerini listeleyen bir HTML belgesi 406
durum koduyla döndürülür (406: ‘kabul edilebilir bir gösterim yok’).
Ayrıca HTTP
Vary
başlığında gösterim çeşitliliğinin boyutları belirtilir.
Üstünlük Değerleriyle Oynamak
Apache bazen yukarıdaki Apache uzlaşım algoritmasının kesin sonucunun
beklenenden farklı olması için üstünlük değerleriyle oynar. Bunu tam ve
doğru bilgi göndermeyen tarayıcılar için algoritmadan en iyi sonucu elde
etmek amacıyla yapar. Bazen günümüzün en tanınmış tarayıcıları bile çoğu
durumda yanlış bir seçimle sonuçlanmayacaksa Accept
başlık
bilgilerini göndermemektedir. Eğer tarayıcı eksiksiz ve doğru bilgi
gönderirse Apache bu değerlerle oynamayacaktır.
Ortam Türleri ve Dosyaismi Kalıpları
Accept:
istek başlığı ortam türü tercihlerini yansıtır.
Ayrıca, * bir dizge ile eşleşmek üzere "image/*" veya "*/*" gibi ortam
türü kalıpları da içerebilir. Dolayısıyla şöyle bir istek,
Accept: image/*, */*
diğer türler gibi "image/" ile başlayan ortam türlerini kabul edilebilir kılacaktır. Bazı tarayıcılar ortam türlerini örtük olarak elde etmek amacıyla hep bu tür kalıplar gönderirler. Örnek:
Accept: text/html, text/plain, image/gif, image/jpeg, */*
Bunun amacı, açıkça listelenmiş türlerin tercih edildiğini, fakat farklı gösterimler varsa onların da kabul edilebileceğini belirtmektir. Üstünlük değerlerini doğrudan kullanarak tarayıcılar gerçekte ne istediklerini şuna benzer şekilde belirtebilirler:
Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
Açıkça belirtilen türler için üstünlük katsayısı belirtilmemiştir, dolayısıyla üstünlük katsayılarının 1.0 (en yüksek) olduğu varsayılmaktadır. */* kalıbı 0.01 gibi çok daha düşük bir öncelik belirtmektedir. Bu bakımdan, ancak, açıkça belirtilen türlerden hiçbirinin bulunmaması halinde diğer türler eşleşecektir.
Eğer Accept:
başlığı hiçbir q
katsayısı içermiyorsa ve başlıkta "*/*" belirtilmişse, Apache istenen
davranışı taklit etmek için bu kalıba 0.01 katsayısını atar. Keza
"type/*" kalıbına da 0.02 katsayısını atar (yani, */* kalıbına göre
tercihli olur). Eğer Accept:
alanındaki her ortam türü bir
q
katsayısı içeriyorsa bu özel değerler uygulanmaz.
Dolayısıyla gerekli bilgiyi açıkça bildiren tarayıcılardan gelen
istekler umulduğu gibi işlem görecektir.
Dil Uzlaşımında İstisnalar
Apache 2.0’dan itibaren, uzlaşım algoritmasına, bir eşleşme bulmak konusunda algoritma başarılı olamadığı takdirde hoş bir son çareye izin vermek için bazı istisnalar eklenmiştir.
İstemci sunucudan bir sayfa istediğinde, sunucu, tarayıcı tarafından
gönderilen Accept-language
başlığıyla eşleşen tek bir sayfa
bulamadığı takdirde istemciye ya “Kabul edilebilir bir gösterim çeşidi
yok” ya da “Çok sayıda seçim belirtilmiş” yanıtını döndürür. Bu hata
iletilerinden kaçınmak için bu gibi durumlarda Apache
Accept-language
başlığını yoksaymaya ayarlanabilir. Böylece
istemcinin isteğine tam olarak uymasa da bir belge sağlanır. Bu hata
iletilerinin birini veya her ikisini de geçersiz kılmak için ForceLanguagePriority
yönergesi
kullanılabilir ve sunucunun kararını LanguagePriority
yönergesine
dayanarak vermesi sağlanabilir.
Sunucu ayrıca, tam bir eşleşme bulunmadığı zaman lehçelerle de eşleşme
arayabilir. Örneğin, bir istemci Britanya İngilizcesi
(en-GB
) ile yazılmış belgeler için istekte bulunursa,
sunucu normalde HTTP/1.1 standardına göre bir belgenin basitçe
en
olarak imlenmesine izin vermez. (Bir okuyucu Britanya
İngilizcesini anlıyor ama genel İngilizceyi anlamıyor diye
Accept-Language
başlığında en
değil de
en-GB
’yi belirtmesinin hemen hemen daima bir yapılandırma
hatasına yol açacağına dikkat ediniz. Maalesef, mevcut istemcilerin çoğu
öntanımlı yapılandırmalarında buna benzer şeyler yapmaktadır.) Bununla
birlikte, başka bir dille eşleşme mümkün değilse ve sunucu “Kabul
edilebilir bir gösterim çeşidi yok” hatasını döndürmeye hazırsa veya
LanguagePriority
son
çaresine ayarlanmışsa alt küme belirtimini yok sayacak ve
en
belge isteklerine en-GB
belgelerle yanıt
verecektir. Apache, lehçenin üyesi olduğu anadili, istemcinin kabul
edilebilir diller listesine örtük olarak düşük bir üstünlük değeri ile
ekler. Yalnız şuna dikkat edin, eğer istemci tercihini "en-GB; q=0.9,
fr; q=0.8" olarak belirtirse ve sunucuda sadece "en" ve "fr" belgeleri
varsa sunucu "fr" belge ile yanıt verecektir. HTTP/1.1 belirtimi ile
uyumluluğu sağlamak ve düzgün yapılandırılmış istemcilerle gerektiği
gibi çalışabilmek için bu gereklidir.
Gelişmiş tekniklerin (çerezler, özel URL yolları gibi) desteklenmesi
sırasında, kullanıcının tercih ettiği dili saptamak için Apache 2.0.47
sürümünden beri mod_negotiation
modülü
prefer-language
ortam değişkenini
tanımaktadır. Değişken mevcutsa ve uygun bir dil yaftası içeriyorsa
mod_negotiation
uygun gösterimi seçmeyi deneyecektir.
Böyle bir gösterim çeşidi mevcut değilse normal uzlaşım işlemi
uygulanacaktır.
Örnek
SetEnvIf Cookie "language=(.+)" prefer-language=$1
Header append Vary cookie
Şeffaf İçerik Uzlaşımının Genişletilmesi
Apache, şeffaf içerik uzlaşımı protokolünü (RFC 2295) şöyle genişletir:
Sadece içerik kodlamasına özgü olmak üzere gösterim çeşidi listelerinde
gösterim çeşitlerini imlemek için yeni bir {encoding ..}
elemanı kullanılır. RVSA/1.0 algoritmasının (RFC 2296) gerçeklenimi,
listedeki kodlanmış gösterim çeşitlerini tanımak ve onları
Accept-Encoding
başlık alanıyla ilgili olarak kabul
edilebilir kodlamalara aday gösterim çeşitleri olarak kullanmak üzere
genişletilmiştir. RVSA/1.0 gerçeklenimi, en uygun gösterim çeşidi
seçiminin öncesinde hesaplanmış üstünlük katsayısını virgülden sonra beş
haneye yuvarlamaz.
Hiperbağlar ve İsimlendirme Uzlaşımları
Eğer dil uzlaşımı kullanıyorsanız ve birden fazla dosya ismi uzantısına sahip dosyalarınız varsa uzantıların sıralamasının normalde uygunsuz düştüğü farklı isimlendirme yaklaşımlarında bulunabilirsiniz (ayrıntılar için mod_mime belgesine bakınız).
Bir MIME türü uzantısına sahip bir dosyanın (html
gibi),
kodlanmış bir gösterimi (gz
gibi) mevcut olabilir. Bu
dosyanın ayrıca farklı dillerdeki gösterimleri için de bir uzantısı
(en
gibi) olabilir.
Örnekler:
- misal.en.html
- misal.html.en
- misal.en.html.gz
Hiperbağ olarak geçerli ve geçersiz bazı dosya ismi örnekleri:
Dosya ismi | Geçerli Hiperbağ | Geçersiz Hiperbağ |
---|---|---|
misal.html.en | misal misal.html |
- |
misal.en.html | misal | misal.html |
misal.html.en.gz | misal misal.html |
misal.gz misal.html.gz |
misal.en.html.gz | misal | misal.html misal.html.gz misal.gz |
misal.gz.html.en | misal misal.gz misal.gz.html |
misal.html |
misal.html.gz.en | misal misal.html misal.html.gz |
misal.gz |
Yukarıdaki tabloya bakarak hiperbağlarda bir dosya ismini uzantısız
olarak (misal
gibi) kullanmanın daima mümkün olduğunu
farkedeceksiniz. Böylece br belgenin asıl türünü gizleyebilir ve
sonradan bir hiperbağ değişikliği yapmaksızın örneğin
html
’den shtml
veya cgi
’ye
geçebilirsiniz.
Hiperbağlarda MIME türlerini (misal.html
gibi) kullanmaya
devam etmek istiyorsanız dil uzantısı MIME türü uzantısının sağında
kalmalıdır (misal.html.en
gibi).
Arabellekler Hakkında
Bir arabellek, bir gösterimi istek URL’si ile ilişkilendirerek saklar. Böylece, sonradan aynı URL için bir istek yapıldığında kaydettiği gösterimi kullanabilir. Fakat özkaynak sunucuyla uzlaşılan türdeyse arabelleğe ilk istenen çeşit saklanmış olacağından isteğe yanlış gösterimle yanıt verilmiş olacaktır. Bunun olmaması için Apache, normal olarak içerik uzlaşımının sonucu olarak döndürülen tüm yanıtları HTTP/1.0 istemciler tarafından arabelleklenemez olarak imler. Apache ayrıca, uzlaşımlı yanıtların arabelleklenmesini mümkün kılan HTTP/1.1 protokolünü de destekler.
HTTP/1.0 uyumlu istemcilerden (bir tarayıcı veya arabellek) gelen
istekler için, uzlaşıma konu yanıtların arabelleklenmesini mümkün kılmak
üzere CacheNegotiatedDocs
yönergesi kullanılabilir. Bu yönerge
argümansızdır ve sunucu genelinde veya sanal konakların
yapılandırılmasında kullanılabilir. Bunun HTTP/1.1 istemcilerinden gelen
isteklere bir etkisi yoktur.
HTTP/1.1 istemciler için, Apache, yanıtın uzlaşım boyutlarını göstermek
üzere bir Vary
HTTP yanıt başlığı gönderir. Arabellekler bu
bilgiyi sonraki istekleri yerel kopyadan sunarken kullanabilirler. Bir
arabelleğin uzlaşım boyutlarına bakmaksızın yerel kopyasını kullanmaya
teşvik etmek için force-no-vary
ortam değişkenini etkin kılabilirsiniz.