1 <?xml version='1.0' encoding='UTF-8' ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.tr.xsl"?>
4 <!-- English Revision: 1029134 -->
5 <!-- =====================================================
6 Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
7 Reviewed by: Orhan Berent <berent belgeler.org>
8 ========================================================== -->
11 Licensed to the Apache Software Foundation (ASF) under one or more
12 contributor license agreements. See the NOTICE file distributed with
13 this work for additional information regarding copyright ownership.
14 The ASF licenses this file to You under the Apache License, Version 2.0
15 (the "License"); you may not use this file except in compliance with
16 the License. You may obtain a copy of the License at
18 http://www.apache.org/licenses/LICENSE-2.0
20 Unless required by applicable law or agreed to in writing, software
21 distributed under the License is distributed on an "AS IS" BASIS,
22 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23 See the License for the specific language governing permissions and
24 limitations under the License.
27 <manualpage metafile="content-negotiation.xml.meta">
29 <title>İçerik Uzlaşımı</title>
33 <p>Apache HTTPD, içerik uzlaşımını HTTP/1.1 belirtiminde bahsedildiği şekliyle
34 destekler. Bir özkaynağın en iyi gösterimini, tarayıcının sağladığı
35 karakter kodlaması, karakter kümesi, dil, ortam türü gibi kullanıcı
36 tercihlerine bağlı olarak seçebilir. Ayrıca, tarayıcının kullanıcı
37 tercihlerini tam yansıtamadığı durumlarda istekleri daha akıllıca ele
38 alabilmeyi sağlayacak bir takım özelliklere de sahiptir.</p>
40 <p>İçerik uzlaşımı öntanımlı olarak derlenen
41 <module>mod_negotiation</module> modülü tarafından sağlanır.</p>
44 <section id="about"><title>İçerik Uzlaşımı Hakkında</title>
46 <p>Bir özkaynağın bir çok farklı gösterimi olabilir. Örneğin, bir belgenin
47 farklı ortam türleri ve/veya farklı diller için gösterimleri olabilir.
48 En uygun seçimi yapmanın tek yolu kullanıcıya bir liste verip seçmesini
49 istemektir. Bununla birlikte sunucunun bu seçimi kendiliğinden yapması
50 da mümkündür. Tarayıcılar isteğin bir parçası olarak kullanıcı
51 tercihlerini de gönderdiğinden bu istendiği gibi çalışır. Örneğin bir
52 tarayıcı, kullanıcısınının mümkünse Fransızca içerik tercih ettiğini
53 yoksa İngilizce içeriğe de razı olabileceğini belirtebilirdi.
54 Tarayıcılar bu tercihleri başlıkta belirtirler. Tarayıcı sadece Türkçe
55 içerik istendiğini şöyle belirtebilirdi:</p>
57 <example>Accept-Language: tr</example>
59 <p>Bu tercihin yerine getirilebilmesininin sadece, desteklenen diller
60 arasında bu dilin varlığına ve istenen belgenin bu dilde bir
61 gösteriminin bulunmasına bağlı oluşuna dikkat ediniz.</p>
63 <p>Daha karmaşık bir istek örneği olarak, tarayıcının Fransızca ve
64 İngilizce içerik kabul etmeye ayarlandığını fakat Fransızcayı tercih
65 ettiğini ve çeşitli ortam türlerini kabul etmekle birlikte salt metin ve
66 diğer metin türlerinden ziyade HTML tercih ettiğini, ayrıca, diğer ortam
67 türleri üzerinde GIF veya JPEG tercih ettiğini fakat başka çare yoksa
68 her ortam türüne de izin verdiğini belirtiyor olsun:</p>
71 Accept-Language: fr; q=1.0, en; q=0.5<br />
72 Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg;
73 q=0.6, image/*; q=0.5, */*; q=0.1
76 <p>httpd, HTTP/1.1 belirtiminde tanımlanan şekliyle ‘sunucu yönetiminde’
77 içerik uzlaşımını destekler. <code>Accept</code>,
78 <code>Accept-Language</code>, <code>Accept-Charset</code> ve
79 <code>Accept-Encoding</code> istek başlıklarını tamamen destekler.
80 httpd ayrıca, RFC 2295 ve RFC 2296’da tanımlanan bir deneysel uzlaşım
81 olarak ‘şeffaf’ içerik uzlaşımını da destekler. Fakat ‘özellik
82 uzlaşımını’ bu RFC’lerde tanımlandığı gibi desteklemez.</p>
84 <p>Bir <strong>özkaynak</strong> bir URI (RFC 2396) tarafından betimlenen
85 kavramsal bir öğedir. Apache gibi bir HTTP sunucusu, ortam türü,
86 karakter kümesi, kodlama ve saire ile tanımlanmış bir bayt dizisi
87 şeklindeki her gösterimiyle, özkaynaklara kendi isim alanları dahilinde
88 erişim sağlar. Her özkaynağın aynı anda bir veya daha fazla gösterimi
89 mevcut olabileceği gibi hiç mevcut olmayabilir de. Eğer çok sayıda
90 gösterim mevcutsa, bu özkaynağın <strong>uzlaşılabilir</strong>
91 olduğundan ve her gösteriminin bir <strong>çeşitlilik</strong>
92 oluşturduğundan bunun da uzlaşımın <strong>boyutlar</strong>ından
93 kaynaklandığından bahsedilebilir.</p>
96 <section id="negotiation"><title>httpd’de İçerik Uzlaşımı</title>
98 <p>Bir özkaynak üzerinde uzlaşılırken gösterim çeşitlerinin her biri
99 hakkında sunucuya bilgi verilmesi gerekir. Bu iki yolla yapılabilir:</p>
102 <li>Ya gösterim çeşitlerini içeren dosyaların isimleriyle eşleşmeyi
103 sağlayan bir tür eşlemi kullanılır (bir <code>*.var</code> dosyası
106 <li>Ya da sunucu örtük bir dosya ismi kalıbı eşleşmesinin ardından
107 sonuçlar arasından seçim yapar; buna ‘Çoklu Görünüm’ araması adı
111 <section id="type-map"><title>Bir türeşlem dosyası kullanmak</title>
113 <p>Bir türeşlem dosyası, <code>type-map</code> eylemcisi ile ilişkili bir
114 belgedir (ya da eski httpd yapılandırmaları ile geriye uyumluluk için,
115 <code>application/x-type-map</code> <glossary>MIME türü</glossary>nde
116 bir belgedir). Bu özelliği kullanmak için, yapılandırmada bir tür
117 eşleyici olarak her dosya ismi uzantısı için bir <code>type-map</code>
118 eylemcisi tanımlamalısınız. Bu, sunucu yapılandırma dosyasında en iyi
119 şöyle yapılabilir:</p>
121 <example>AddHandler type-map .var</example>
123 <p>Türeşlem dosyaları kendilerini tanımlayan özkaynak ile aynı isimde
124 olmalı ve her gösterim çeşidi için bir girdi içermelidir; bu girdiler
125 ardarda belirtilen HTTP biçem başlık satırlarından oluşur. Farklı
126 gösterimlerin girdileri bir boş satırla diğerlerinden ayrılır. Aynı
127 girdi içinde boş satır kullanılamaz. Bir eşlem dosyasını bir birleşik
128 öğenin tamamı için bir girdi ile başlatmak adet olmuştur (ise de, bu
129 gerekli değildir, hele yoksayılacaksa hiç gerekli değildir). Eşlem
130 dosyası için aşağıda bir örnek verilmiştir. Dosya <code>misal</code>
131 isimli bir özkaynak hakkında olduğundan dosyaya <code>misal.var</code>
132 ismi verilebilir.</p>
137 URI: misal.en.html<br />
138 Content-type: text/html<br />
139 Content-language: en<br />
141 URI: misal.fr.de.html<br />
142 Content-type: text/html;charset=iso-8859-2<br />
143 Content-language: fr, de<br />
146 <p>Ayrıca, <code>MultiViews</code> etkin olsa bile bir türeşlem dosyasının
147 dosya ismi uzantılarının taranmasına göre öncelik alacağına dikkat
148 ediniz. Eğer gösterimler bu örnekteki resim dosyasında olduğu gibi
149 farklı kaynak üstünlüklerine sahipseler, ortam türünün <code>qs</code>
150 parametresi kullanılarak kaynak üstünlükleri belirtilebilir: </p>
155 URI: misal.jpeg<br />
156 Content-type: image/jpeg; <strong>qs=0.8</strong><br />
159 Content-type: image/gif; <strong>qs=0.5</strong><br />
162 Content-type: text/plain; <strong>qs=0.01</strong><br />
165 <p><code>qs</code> değerleri 0.000-1.000 değer aralığı içinde
166 belirtilebilir. 0.000 <code>qs</code> değerine sahip gösterimin asla
167 seçilmeyeceğine dikkat ediniz. Bir <code>qs</code> değeri belirtilmeyen
168 gösterimlerin kaynak üstünlüğü 1.000 kabul edilir. <code>qs</code>
169 parametresinin belirttiği değer istemcinin yeteneklerinden bağımsız
170 olarak olası gösterimler arasında göreli bir üstünlük ifade eder.
171 Örneğin bir fotoğraf sözkonusu olduğunda bir JPEG dosyasının kaynak
172 üstünlüğü bir ASCII çiziminkinden yüksek olacaktır. Diğer taraftan özgün
173 resim bir ASCII çizim olduğu takdirde, ASCII çizim, bir JPEG gösterimine
174 göre öncelikli olacaktır. Bu nedenle <code>qs</code> değeri özkaynağın
175 doğasına bakarak belirlenir.</p>
177 <p>Tanınan başlıkların tam listesini <a
178 href="mod/mod_negotiation.html#typemaps" >mod_negotiation</a> modülünün
179 belgesinde bulabilirsiniz.</p>
182 <section id="multiviews"><title>Çoklu Görünümler</title>
184 <p><code>MultiViews</code>, <code>httpd.conf</code> dosyasındaki veya
185 (<directive module="core">AllowOverride</directive> yönergesinin
186 değerine bağlı olarak) <code>.htaccess</code> dosyalarındaki <directive
187 module="core" type="section">Directory</directive>, <directive
188 module="core" type="section">Location</directive> veya <directive
189 module="core" type="section">Files</directive> bölümleri içinde
190 <directive module="core">Options</directive> yönergeleri ile
191 belirtilebilen, dizine özgü bir seçenektir. Yalnız, dikkatli olun,
192 <code>Options All</code> yaparak <code>MultiViews</code> seçeneğini
193 etkin kılamazsınız; seçeneği ismiyle açıkça belirtmelisiniz.</p>
195 <p><code>MultiViews</code> şöyle etki eder: Sunucudan,
196 <code>MultiViews</code> seçeneğinin etkin olduğu <code>/bir/dizin</code>
197 dizininden <code>filanca</code> dosyası için bir istekte bulunulmuşsa
198 fakat dizinde bu dosya yoksa, sunucu dizin içeriğini
199 <code>filanca.*</code> dosyaları için tarar ve bu dosyalar için
200 istemcinin ismiyle talep ettiği ortam türlerini ve kodlamaları
201 kullanarak bir türeşlem dosyası uydurup bu gösterimler arasından
202 istemcinin gereksinimlerine en uygun gösterimi seçer.</p>
204 <p><code>MultiViews</code> ayrıca, sunucunun bir dizin içeriğini
205 listelemeye çalıştığı durumda <directive module="mod_dir"
206 >DirectoryIndex</directive> yönergesi ile belirtilen dosya için de bir
207 arama tertipleyebilir. Eğer yapılandırma dosyalarında</p>
209 <example>DirectoryIndex index</example>
211 <p>şeklinde bir atama varsa ve dizinde <code>index.html</code> ve
212 <code>index.html3</code> dosyaları varsa sunucu bunlar arasından hakem
213 sıfatıyla bir seçim yapacaktır; ama bu ikisi yerine dizinde sadece
214 <code>index.cgi</code> mevcutsa sunucu sadece bu dosyayı
217 <p>Okunan dizinde bulunan dosyalar arasında <code>mod_mime</code>
218 tarafından tanınan karakter kümesi, içerik türü, dil ve kodlama
219 başlıklarına uygun gösterim uzantılarından birine sahip bir dosya yoksa
220 sonuç <directive module="mod_mime">MultiViewsMatch</directive>
221 yönergesiyle yapılan tanıma bağlı olur. Bu yönerge hangi diğer dosya
222 uzantılarının, eylemcilerin veya süzgeçlerin çok gösterimli uzlaşımla
223 ilintileneceğini belirler.</p>
227 <section id="methods"><title>Uzlaşım Yöntemleri</title>
229 <p>httpd’nin, bir türeşlem dosyası veya dizin içindeki bir dosya
230 sayesinde belli bir özkaynağın gösterim çeşitlerinin bir listesini elde
231 ettikten sonra ‘en uygun’ gösterime karar vermek için kullanabileceği
232 iki yöntem vardır. httpd’nin içerik uzlaşım özelliklerinin kullanımı
233 sırasında uzlaşımın nasıl yerine getirileceği ile ilgili ayrıntıları
234 bilmek aslında gerekli değildir. Bununla birlikte belgenin kalanında bu
235 konu açıklanmaya çalışılmıştır.</p>
237 <p>İki uzlaşım yöntemi vardır:</p>
240 <li>Normal durumda <strong>sunucu yönetiminde httpd uzlaşım
241 algoritması</strong> kullanılır. Bu algoritma aşağıda ayrıntılı olarak
242 açıklanmıştır. Bu algoritma kullanıldığı zaman, httpd, en iyi sonuca
243 ulaşmak için bazen belli boyutların üstünlük katsayılarıyla ‘oynar’.
244 httpd’nin bu katsayılarla oynama işini nasıl yaptığı aşağıda daha
245 ayrıntılı açıklanmıştır.</li>
247 <li>İstemci bu işlem için özellikle RFC 2295’te tanımlanan mekanizmanın
248 kullanılmasını isterse <strong>şeffaf içerik uzlaşımı</strong>
249 kullanılır. Bu uzlaşım yöntemi, en uygun gösterimin seçilmesi
250 konusunda tarayıcıya tam denetim imkanı verir; dolayısıyla sonuç
251 tarayıcının bu işlem için kullandığı algoritmanın başarısına bağlıdır.
252 Şeffaf uzlaşım sürecinin bir parçası olarak, tarayıcı, RFC 2296’da
253 tanımlanan ‘gösterim çeşidini uzaktan seçme algoritması’nın
254 çalıştırılmasını httpd’den isteyebilir.</li>
257 <section id="dimensions"><title>Uzlaşımın Boyutları</title>
260 <columnspec><column width=".15"/><column width=".85"/></columnspec>
270 <td>Tarayıcı ortam türü tercihlerini <code>Accept</code> başlık alanı
271 ile belirtir. Her öğenin kendine özgü bir üstünlük katsayısı
272 olabilir. Gösterimin açıklaması da ayrıca bir kaynak üstünlüğüne
273 (<code>qs</code> parametresi) sahip olabilir.</td>
279 <td>Tarayıcı dil tercihlerini <code>Accept-Language</code> başlık
280 alanı ile belirtir. Her öğenin kendine özgü bir üstünlük katsayısı
281 olabilir. Gösterimler bir kaç dilde olabileceği gibi hiç bir dille
282 ilişkilendirimemiş de olabilir.</td>
288 <td>Tarayıcı kodlama tercihlerini <code>Accept-Encoding</code> başlık
289 alanı ile belirtir. Her öğenin kendine özgü bir üstünlük katsayısı
294 <td>Karakter Kümesi</td>
296 <td>Tarayıcı karakter kümesi tercihlerini <code>Accept-Charset</code>
297 başlık alanı ile belirtir. Her öğenin kendine özgü bir üstünlük
298 katsayısı olabilir. Gösterim çeşitleri karakter kümesini ortam
299 türünün bir parametresi olarak belirtebilirler.</td>
304 <section id="algorithm"><title>httpd Uzlaşım Algoritması</title>
306 <p>httpd, tarayıcıya döndürülecek en uygun gösterim çeşidini (varsa)
307 seçmek için aşağıdaki algoritmayı kullanabilir. Bu algoritma pek de
308 yapılandırılabilir değildir. Şöyle çalışır:</p>
311 <li>Önce her uzlaşım boyutu için ilgili <em>Accept*</em> başlık alanına
312 bakılıp her gösterim çeşidine bir üstünlük katsayısı atanır. Eğer
313 boyutlardan bazıları için ilgili <em>Accept*</em> başlığı
314 uygulanabilir değilse bu boyut elenir ve sonuçta hiçbir gösterim
315 çeşidi kalmasza 4. adıma atlanır.</li>
317 <li>‘En uygun’ gösterim çeşidi bir eleme süreciyle seçilir. Bu süreç
318 sırasında aşağıdaki sınamalar sırayla uygulanır. Sınamalardan
319 geçemeyen bir gösterim çeşidi elenir. Sınamaların bir aşamasında tek
320 bir gösterim çeşidi kalırsa bu en uygun eşleşme olarak seçilmiş olur
321 ve 3. adıma atlanır. Eğer birden fazla gösterim çeşidi kalırsa sonraki
325 <li><code>Accept</code> başlığındaki üstünlük katsayısı ile
326 gösterimin ortam türünde belirtilen kaynak üstünlüğünün çarpımı en
327 büyük olan gösterim çeşidi seçilir.</li>
329 <li>En yüksek dil üstünlük katsayısına sahip gösterim çeşidi seçilir.
332 <li>En uygun dil eşleşmesine sahip gösterim çeşidini seçmek için
333 önce varsa <code>Accept-Language</code> başlığındaki dil
334 sıralamasına bakılır, aksi takdirde <code>LanguagePriority</code>
335 yönergesi ile atanmışsa oradaki dil sıralamasına bakılır.</li>
337 <li>En yüksek ‘seviyeden’ ortam parametresine (text/html ortam türü
338 sürümünü belirtmekte kullanılır) sahip gösterim çeşitleri
341 <li><code>Accept-Charset</code> başlık satırında belirtilene bakarak
342 en uygun karakter kümesine sahip gösterim çeşitleri seçilir.
343 Alenen dışlanmadıkça ISO-8859-1 kabul edilebilir karakter
344 kümesidir. <code>text/*</code> ortam türüne sahip gösterim
345 çeşitlerinden belli bir karakter kümesi ile ilişkilendirilmemiş
346 olanların karakter kümesinin ISO-8859-1 olduğu varsayılır.</li>
348 <li>ISO-8859-1 karakter kümesi ile ilişkilendirilmemiş gösterim
349 çeşitleri seçilir. Böyle hiçbir gösterim yoksa bütün gösterimler
352 <li>En uygun kodlamaya sahip gösterim çeşitleri seçilir. Tarayıcı
353 tarafından kabul edilebilir kodlamaya sahip gösterim çeşitleri
354 varsa bunlar seçilir. Yoksa kodlanmış ve kodlanmamış gösterim
355 çeşitleri karışık olarak mevcutsa sadece kodlanmamış olanlar
356 seçilir. Eğer bütün gösterim çeşitlerinin sadece kodlanmış ya da
357 sadece kodlanmamış gösterimleri mevcutsa hepsi seçilir.</li>
359 <li>En küçük içerik uzunluğuna sahip gösterim çeşitleri seçilir.</li>
361 <li>Kalan gösterim çeşitlerinin ilki seçilir. Bu ilk, ya türeşlem
362 dosyasında listelenen ilk çeşittir ya da gösterimler bir dizinden
363 okunuyorsa ASCII kod sıralamasına göre ilk sıradaki dosya ismine
364 sahip gösterimdir.</li>
368 <li>Algoritma, artık seçilmiş en uygun gösterim çeşidine sahipse bu
369 artık yanıt olarak döndürülebilir. HTTP yanıt başlığı
370 <code>Vary</code>’ye uzlaşım boyutları atanır (tarayıcı ve
371 arabellekler özkaynağı kaydederken bu bilgiyi kullanırlar)
372 ve algoritma sonlandırılır.</li>
374 <li>Buraya gelinmişse hiçbir gösterim seçilmemiş demektir (hiçbiri
375 tarayıcı tarafından kabul edilebilir bulunmadığından dolayı).
376 Gövdesinde mevcut gösterim çeşitlerini listeleyen bir HTML belgesi 406
377 durum koduyla döndürülür (406: ‘kabul edilebilir bir gösterim yok’).
378 Ayrıca HTTP <code>Vary</code> başlığında gösterim çeşitliliğinin
379 boyutları belirtilir.</li>
384 <section id="better"><title>Üstünlük Değerleriyle Oynamak</title>
386 <p>httpd bazen yukarıdaki httpd uzlaşım algoritmasının kesin sonucunun
387 beklenenden farklı olması için üstünlük değerleriyle oynar. Bunu tam ve
388 doğru bilgi göndermeyen tarayıcılar için algoritmadan en iyi sonucu elde
389 etmek amacıyla yapar. Bazen günümüzün en tanınmış tarayıcıları bile çoğu
390 durumda yanlış bir seçimle sonuçlanmayacaksa <code>Accept</code> başlık
391 bilgilerini göndermemektedir. Eğer tarayıcı eksiksiz ve doğru bilgi
392 gönderirse httpd bu değerlerle oynamayacaktır.</p>
394 <section id="wildcards"><title>Ortam Türleri ve Dosyaismi Kalıpları</title>
396 <p><code>Accept:</code> istek başlığı ortam türü tercihlerini yansıtır.
397 Ayrıca, * bir dizge ile eşleşmek üzere "image/*" veya "*/*" gibi ortam
398 türü kalıpları da içerebilir. Dolayısıyla şöyle bir istek,</p>
400 <example>Accept: image/*, */*</example>
402 <p>diğer türler gibi "image/" ile başlayan ortam türlerini kabul
403 edilebilir kılacaktır. Bazı tarayıcılar ortam türlerini örtük olarak
404 elde etmek amacıyla hep bu tür kalıplar gönderirler. Örnek:</p>
407 Accept: text/html, text/plain, image/gif, image/jpeg, */*
410 <p>Bunun amacı, açıkça listelenmiş türlerin tercih edildiğini, fakat
411 farklı gösterimler varsa onların da kabul edilebileceğini belirtmektir.
412 Üstünlük değerlerini doğrudan kullanarak tarayıcılar gerçekte ne
413 istediklerini şuna benzer şekilde belirtebilirler:</p>
416 Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
419 <p>Açıkça belirtilen türler için üstünlük katsayısı belirtilmemiştir,
420 dolayısıyla üstünlük katsayılarının 1.0 (en yüksek) olduğu
421 varsayılmaktadır. */* kalıbı 0.01 gibi çok daha düşük bir öncelik
422 belirtmektedir. Bu bakımdan, ancak, açıkça belirtilen türlerden
423 hiçbirinin bulunmaması halinde diğer türler eşleşecektir.</p>
425 <p>Eğer <code>Accept:</code> başlığı <em>hiçbir</em> <code>q</code>
426 katsayısı içermiyorsa ve başlıkta "*/*" belirtilmişse, httpd istenen
427 davranışı taklit etmek için bu kalıba 0.01 katsayısını atar. Keza
428 "type/*" kalıbına da 0.02 katsayısını atar (yani, */* kalıbına göre
429 tercihli olur). Eğer <code>Accept:</code> alanındaki her ortam türü bir
430 <code>q</code> katsayısı içeriyorsa bu özel değerler uygulanmaz.
431 Dolayısıyla gerekli bilgiyi açıkça bildiren tarayıcılardan gelen
432 istekler umulduğu gibi işlem görecektir.</p>
435 <section id="exceptions"><title>Dil Uzlaşımında İstisnalar</title>
437 <p>httpd 2.0’dan itibaren, uzlaşım algoritmasına, bir eşleşme bulmak
438 konusunda algoritma başarılı olamadığı takdirde hoş bir son çareye izin
439 vermek için bazı istisnalar eklenmiştir.</p>
441 <p>İstemci sunucudan bir sayfa istediğinde, sunucu, tarayıcı tarafından
442 gönderilen <code>Accept-language</code> başlığıyla eşleşen tek bir sayfa
443 bulamadığı takdirde istemciye ya “Kabul edilebilir bir gösterim çeşidi
444 yok” ya da “Çok sayıda seçim belirtilmiş” yanıtını döndürür. Bu hata
445 iletilerinden kaçınmak için bu gibi durumlarda httpd
446 <code>Accept-language</code> başlığını yoksaymaya ayarlanabilir. Böylece
447 istemcinin isteğine tam olarak uymasa da bir belge sağlanır. Bu hata
448 iletilerinin birini veya her ikisini de geçersiz kılmak için <directive
449 module="mod_negotiation">ForceLanguagePriority</directive> yönergesi
450 kullanılabilir ve sunucunun kararını <directive
451 module="mod_negotiation">LanguagePriority</directive> yönergesine
452 dayanarak vermesi sağlanabilir.</p>
454 <p>Sunucu ayrıca, tam bir eşleşme bulunmadığı zaman lehçelerle de eşleşme
455 arayabilir. Örneğin, bir istemci Britanya İngilizcesi
456 (<code>en-GB</code>) ile yazılmış belgeler için istekte bulunursa,
457 sunucu normalde HTTP/1.1 standardına göre bir belgenin basitçe
458 <code>en</code> olarak imlenmesine izin vermez. (Bir okuyucu Britanya
459 İngilizcesini anlıyor ama genel İngilizceyi anlamıyor diye
460 <code>Accept-Language</code> başlığında <code>en</code> değil de
461 <code>en-GB</code>’yi belirtmesinin hemen hemen daima bir yapılandırma
462 hatasına yol açacağına dikkat ediniz. Maalesef, mevcut istemcilerin çoğu
463 öntanımlı yapılandırmalarında buna benzer şeyler yapmaktadır.) Bununla
464 birlikte, başka bir dille eşleşme mümkün değilse ve sunucu “Kabul
465 edilebilir bir gösterim çeşidi yok” hatasını döndürmeye hazırsa veya
466 <directive module="mod_negotiation" >LanguagePriority</directive> son
467 çaresine ayarlanmışsa alt küme belirtimini yok sayacak ve
468 <code>en</code> belge isteklerine <code>en-GB</code> belgelerle yanıt
469 verecektir. httpd, lehçenin üyesi olduğu anadili, istemcinin kabul
470 edilebilir diller listesine örtük olarak düşük bir üstünlük değeri ile
471 ekler. Yalnız şuna dikkat edin, eğer istemci tercihini "en-GB; q=0.9,
472 fr; q=0.8" olarak belirtirse ve sunucuda sadece "en" ve "fr" belgeleri
473 varsa sunucu "fr" belge ile yanıt verecektir. HTTP/1.1 belirtimi ile
474 uyumluluğu sağlamak ve düzgün yapılandırılmış istemcilerle gerektiği
475 gibi çalışabilmek için bu gereklidir.</p>
477 <p>Gelişmiş tekniklerin (çerezler, özel URL yolları gibi) desteklenmesi
478 sırasında, kullanıcının tercih ettiği dili saptamak için httpd 2.0.47
479 sürümünden beri <module>mod_negotiation</module> modülü
480 <code>prefer-language</code> <a href="env.html">ortam değişkenini</a>
481 tanımaktadır. Değişken mevcutsa ve uygun bir dil yaftası içeriyorsa
482 <module>mod_negotiation</module> uygun gösterimi seçmeyi deneyecektir.
483 Böyle bir gösterim çeşidi mevcut değilse normal uzlaşım işlemi
486 <example><title>Örnek</title>
487 SetEnvIf Cookie "language=(.+)" prefer-language=$1<br />
488 Header append Vary cookie
493 <section id="extensions">
494 <title>Şeffaf İçerik Uzlaşımının Genişletilmesi</title>
496 <p>httpd, şeffaf içerik uzlaşımı protokolünü (RFC 2295) şöyle genişletir:
497 Sadece içerik kodlamasına özgü olmak üzere gösterim çeşidi listelerinde
498 gösterim çeşitlerini imlemek için yeni bir <code>{encoding ..}</code>
499 elemanı kullanılır. RVSA/1.0 algoritmasının (RFC 2296) gerçeklenimi,
500 listedeki kodlanmış gösterim çeşitlerini tanımak ve onları
501 <code>Accept-Encoding</code> başlık alanıyla ilgili olarak kabul
502 edilebilir kodlamalara aday gösterim çeşitleri olarak kullanmak üzere
503 genişletilmiştir. RVSA/1.0 gerçeklenimi, en uygun gösterim çeşidi
504 seçiminin öncesinde hesaplanmış üstünlük katsayısını virgülden sonra beş
505 haneye yuvarlamaz.</p>
508 <section id="naming"><title>Hiperbağlar ve İsimlendirme Uzlaşımları</title>
510 <p>Eğer dil uzlaşımı kullanıyorsanız ve birden fazla dosya ismi uzantısına
511 sahip dosyalarınız varsa uzantıların sıralamasının normalde uygunsuz
512 düştüğü farklı isimlendirme yaklaşımlarında bulunabilirsiniz (ayrıntılar
513 için <a href="mod/mod_mime.html#multipleext">mod_mime</a> belgesine
516 <p>Bir MIME türü uzantısına sahip bir dosyanın (<code>html</code> gibi),
517 kodlanmış bir gösterimi (<code>gz</code> gibi) mevcut olabilir. Bu
518 dosyanın ayrıca farklı dillerdeki gösterimleri için de bir uzantısı
519 (<code>en</code> gibi) olabilir.</p>
524 <li>misal.en.html</li>
526 <li>misal.html.en</li>
528 <li>misal.en.html.gz</li>
531 <p>Hiperbağ olarak geçerli ve geçersiz bazı dosya ismi örnekleri:</p>
533 <table border="1" cellpadding="8" cellspacing="0">
534 <columnspec><column width=".2"/><column width=".2"/>
535 <column width=".2"/></columnspec>
539 <th>Geçerli Hiperbağ</th>
541 <th>Geçersiz Hiperbağ</th>
545 <td><em>misal.html.en</em></td>
554 <td><em>misal.en.html</em></td>
562 <td><em>misal.html.en.gz</em></td>
572 <td><em>misal.en.html.gz</em></td>
582 <td><em>misal.gz.html.en</em></td>
592 <td><em>misal.html.gz.en</em></td>
602 <p>Yukarıdaki tabloya bakarak hiperbağlarda bir dosya ismini uzantısız
603 olarak (<code>misal</code> gibi) kullanmanın daima mümkün olduğunu
604 farkedeceksiniz. Böylece bir belgenin asıl türünü gizleyebilir ve
605 sonradan bir hiperbağ değişikliği yapmaksızın örneğin
606 <code>html</code>’den <code>shtml</code> veya <code>cgi</code>’ye
609 <p>Hiperbağlarda MIME türlerini (<code>misal.html</code> gibi) kullanmaya
610 devam etmek istiyorsanız dil uzantısı MIME türü uzantısının sağında
611 kalmalıdır (<code>misal.html.en</code> gibi).</p>
614 <section id="caching"><title>Arabellekler Hakkında</title>
616 <p>Bir arabellek, bir gösterimi istek URL’si ile ilişkilendirerek saklar.
617 Böylece, sonradan aynı URL için bir istek yapıldığında kaydettiği
618 gösterimi kullanabilir. Fakat özkaynak sunucuyla uzlaşılan türdeyse
619 arabelleğe ilk istenen çeşit saklanmış olacağından isteğe yanlış
620 gösterimle yanıt verilmiş olacaktır. Bunun olmaması için httpd, normal
621 olarak içerik uzlaşımının sonucu olarak döndürülen tüm yanıtları
622 HTTP/1.0 istemciler tarafından arabelleklenemez olarak imler. httpd
623 ayrıca, uzlaşımlı yanıtların arabelleklenmesini mümkün kılan HTTP/1.1
624 protokolünü de destekler.</p>
626 <p>HTTP/1.0 uyumlu istemcilerden (bir tarayıcı veya arabellek) gelen
627 istekler için, uzlaşıma konu yanıtların arabelleklenmesini mümkün kılmak
628 üzere <directive module="mod_negotiation"
629 >CacheNegotiatedDocs</directive> yönergesi kullanılabilir. Bu yönerge
630 argümansızdır ve sunucu genelinde veya sanal konakların
631 yapılandırılmasında kullanılabilir. Bunun HTTP/1.1 istemcilerinden gelen
632 isteklere bir etkisi yoktur.</p>
634 <p>HTTP/1.1 istemciler için, httpd, yanıtın uzlaşım boyutlarını göstermek
635 üzere bir <code>Vary</code> HTTP yanıt başlığı gönderir. Arabellekler bu
636 bilgiyi sonraki istekleri yerel kopyadan sunarken kullanabilirler. Bir
637 arabelleğin uzlaşım boyutlarına bakmaksızın yerel kopyasını kullanmaya
638 teşvik etmek için <code>force-no-vary</code> <a href="env.html#special"
639 >ortam değişkenini</a> etkin kılabilirsiniz.</p>