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: 1174747:1673932 (outdated) -->
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 isim bir <code>.var</code> uzantısı içermelidir. Aşağıdaki
125 örneklerde özkaynak ismi <code>foo</code> olduğundan türeşlem dosyasının
126 ismi <code>foo.var</code>'dır.</p>
128 <p>Bu dosya her gösterim çeşidi için bir girdi içermelidir; bu girdiler
129 ardarda belirtilen HTTP biçem başlık satırlarından oluşur. Farklı
130 gösterimlerin girdileri bir boş satırla diğerlerinden ayrılır. Aynı
131 girdi içinde boş satır kullanılamaz. Bir eşlem dosyasını bir birleşik
132 öğenin tamamı için bir girdi ile başlatmak adet olmuştur (ise de, bu
133 gerekli değildir, hele yoksayılacaksa hiç gerekli değildir). Eşlem
134 dosyası için aşağıda bir örnek verilmiştir.</p>
136 <p>Bu dosyadaki URI'ler türeşlem dosyasının yerine görelidir. Dolayısıyla,
137 bu dosyaların aynı dizinde bulunması beklenirse de bu gerekli değildir.
138 Aynı sunucuda bulunan tüm dosyalar için türeşlem dosyasındaki gibi mutlak
139 veya göreli URI'ler belirtebilirsiniz.</p>
144 URI: misal.en.html<br />
145 Content-type: text/html<br />
146 Content-language: en<br />
148 URI: misal.fr.de.html<br />
149 Content-type: text/html;charset=iso-8859-2<br />
150 Content-language: fr, de<br />
153 <p>Ayrıca, <code>MultiViews</code> etkin olsa bile bir türeşlem dosyasının
154 dosya ismi uzantılarının taranmasına göre öncelik alacağına dikkat
155 ediniz. Eğer gösterimler bu örnekteki resim dosyasında olduğu gibi
156 farklı kaynak üstünlüklerine sahipseler, ortam türünün <code>qs</code>
157 parametresi kullanılarak kaynak üstünlükleri belirtilebilir: </p>
162 URI: misal.jpeg<br />
163 Content-type: image/jpeg; <strong>qs=0.8</strong><br />
166 Content-type: image/gif; <strong>qs=0.5</strong><br />
169 Content-type: text/plain; <strong>qs=0.01</strong><br />
172 <p><code>qs</code> değerleri 0.000-1.000 değer aralığı içinde
173 belirtilebilir. 0.000 <code>qs</code> değerine sahip gösterimin asla
174 seçilmeyeceğine dikkat ediniz. Bir <code>qs</code> değeri belirtilmeyen
175 gösterimlerin kaynak üstünlüğü 1.000 kabul edilir. <code>qs</code>
176 parametresinin belirttiği değer istemcinin yeteneklerinden bağımsız
177 olarak olası gösterimler arasında göreli bir üstünlük ifade eder.
178 Örneğin bir fotoğraf sözkonusu olduğunda bir JPEG dosyasının kaynak
179 üstünlüğü bir ASCII çiziminkinden yüksek olacaktır. Diğer taraftan özgün
180 resim bir ASCII çizim olduğu takdirde, ASCII çizim, bir JPEG gösterimine
181 göre öncelikli olacaktır. Bu nedenle <code>qs</code> değeri özkaynağın
182 doğasına bakarak belirlenir.</p>
184 <p>Tanınan başlıkların tam listesini <a
185 href="mod/mod_negotiation.html#typemaps" >mod_negotiation</a> modülünün
186 belgesinde bulabilirsiniz.</p>
189 <section id="multiviews"><title>Çoklu Görünümler</title>
191 <p><code>MultiViews</code>, <code>httpd.conf</code> dosyasındaki veya
192 (<directive module="core">AllowOverride</directive> yönergesinin
193 değerine bağlı olarak) <code>.htaccess</code> dosyalarındaki <directive
194 module="core" type="section">Directory</directive>, <directive
195 module="core" type="section">Location</directive> veya <directive
196 module="core" type="section">Files</directive> bölümleri içinde
197 <directive module="core">Options</directive> yönergeleri ile
198 belirtilebilen, dizine özgü bir seçenektir. Yalnız, dikkatli olun,
199 <code>Options All</code> yaparak <code>MultiViews</code> seçeneğini
200 etkin kılamazsınız; seçeneği ismiyle açıkça belirtmelisiniz.</p>
202 <p><code>MultiViews</code> şöyle etki eder: Sunucudan,
203 <code>MultiViews</code> seçeneğinin etkin olduğu <code>/bir/dizin</code>
204 dizininden <code>filanca</code> dosyası için bir istekte bulunulmuşsa
205 fakat dizinde bu dosya yoksa, sunucu dizin içeriğini
206 <code>filanca.*</code> dosyaları için tarar ve bu dosyalar için
207 istemcinin ismiyle talep ettiği ortam türlerini ve kodlamaları
208 kullanarak bir türeşlem dosyası uydurup bu gösterimler arasından
209 istemcinin gereksinimlerine en uygun gösterimi seçer.</p>
211 <p><code>MultiViews</code> ayrıca, sunucunun bir dizin içeriğini
212 listelemeye çalıştığı durumda <directive module="mod_dir"
213 >DirectoryIndex</directive> yönergesi ile belirtilen dosya için de bir
214 arama tertipleyebilir. Eğer yapılandırma dosyalarında</p>
216 <example>DirectoryIndex index</example>
218 <p>şeklinde bir atama varsa ve dizinde <code>index.html</code> ve
219 <code>index.html3</code> dosyaları varsa sunucu bunlar arasından hakem
220 sıfatıyla bir seçim yapacaktır; ama bu ikisi yerine dizinde sadece
221 <code>index.cgi</code> mevcutsa sunucu sadece bu dosyayı
224 <p>Okunan dizinde bulunan dosyalar arasında <code>mod_mime</code>
225 tarafından tanınan karakter kümesi, içerik türü, dil ve kodlama
226 başlıklarına uygun gösterim uzantılarından birine sahip bir dosya yoksa
227 sonuç <directive module="mod_mime">MultiViewsMatch</directive>
228 yönergesiyle yapılan tanıma bağlı olur. Bu yönerge hangi diğer dosya
229 uzantılarının, eylemcilerin veya süzgeçlerin çok gösterimli uzlaşımla
230 ilintileneceğini belirler.</p>
234 <section id="methods"><title>Uzlaşım Yöntemleri</title>
236 <p>httpd’nin, bir türeşlem dosyası veya dizin içindeki bir dosya
237 sayesinde belli bir özkaynağın gösterim çeşitlerinin bir listesini elde
238 ettikten sonra ‘en uygun’ gösterime karar vermek için kullanabileceği
239 iki yöntem vardır. httpd’nin içerik uzlaşım özelliklerinin kullanımı
240 sırasında uzlaşımın nasıl yerine getirileceği ile ilgili ayrıntıları
241 bilmek aslında gerekli değildir. Bununla birlikte belgenin kalanında bu
242 konu açıklanmaya çalışılmıştır.</p>
244 <p>İki uzlaşım yöntemi vardır:</p>
247 <li>Normal durumda <strong>sunucu yönetiminde httpd uzlaşım
248 algoritması</strong> kullanılır. Bu algoritma aşağıda ayrıntılı olarak
249 açıklanmıştır. Bu algoritma kullanıldığı zaman, httpd, en iyi sonuca
250 ulaşmak için bazen belli boyutların üstünlük katsayılarıyla ‘oynar’.
251 httpd’nin bu katsayılarla oynama işini nasıl yaptığı aşağıda daha
252 ayrıntılı açıklanmıştır.</li>
254 <li>İstemci bu işlem için özellikle RFC 2295’te tanımlanan mekanizmanın
255 kullanılmasını isterse <strong>şeffaf içerik uzlaşımı</strong>
256 kullanılır. Bu uzlaşım yöntemi, en uygun gösterimin seçilmesi
257 konusunda tarayıcıya tam denetim imkanı verir; dolayısıyla sonuç
258 tarayıcının bu işlem için kullandığı algoritmanın başarısına bağlıdır.
259 Şeffaf uzlaşım sürecinin bir parçası olarak, tarayıcı, RFC 2296’da
260 tanımlanan ‘gösterim çeşidini uzaktan seçme algoritması’nın
261 çalıştırılmasını httpd’den isteyebilir.</li>
264 <section id="dimensions"><title>Uzlaşımın Boyutları</title>
267 <columnspec><column width=".15"/><column width=".85"/></columnspec>
277 <td>Tarayıcı ortam türü tercihlerini <code>Accept</code> başlık alanı
278 ile belirtir. Her öğenin kendine özgü bir üstünlük katsayısı
279 olabilir. Gösterimin açıklaması da ayrıca bir kaynak üstünlüğüne
280 (<code>qs</code> parametresi) sahip olabilir.</td>
286 <td>Tarayıcı dil tercihlerini <code>Accept-Language</code> başlık
287 alanı ile belirtir. Her öğenin kendine özgü bir üstünlük katsayısı
288 olabilir. Gösterimler bir kaç dilde olabileceği gibi hiç bir dille
289 ilişkilendirimemiş de olabilir.</td>
295 <td>Tarayıcı kodlama tercihlerini <code>Accept-Encoding</code> başlık
296 alanı ile belirtir. Her öğenin kendine özgü bir üstünlük katsayısı
301 <td>Karakter Kümesi</td>
303 <td>Tarayıcı karakter kümesi tercihlerini <code>Accept-Charset</code>
304 başlık alanı ile belirtir. Her öğenin kendine özgü bir üstünlük
305 katsayısı olabilir. Gösterim çeşitleri karakter kümesini ortam
306 türünün bir parametresi olarak belirtebilirler.</td>
311 <section id="algorithm"><title>httpd Uzlaşım Algoritması</title>
313 <p>httpd, tarayıcıya döndürülecek en uygun gösterim çeşidini (varsa)
314 seçmek için aşağıdaki algoritmayı kullanabilir. Bu algoritma pek de
315 yapılandırılabilir değildir. Şöyle çalışır:</p>
318 <li>Önce her uzlaşım boyutu için ilgili <em>Accept*</em> başlık alanına
319 bakılıp her gösterim çeşidine bir üstünlük katsayısı atanır. Eğer
320 boyutlardan bazıları için ilgili <em>Accept*</em> başlığı
321 uygulanabilir değilse bu boyut elenir ve sonuçta hiçbir gösterim
322 çeşidi kalmasza 4. adıma atlanır.</li>
324 <li>‘En uygun’ gösterim çeşidi bir eleme süreciyle seçilir. Bu süreç
325 sırasında aşağıdaki sınamalar sırayla uygulanır. Sınamalardan
326 geçemeyen bir gösterim çeşidi elenir. Sınamaların bir aşamasında tek
327 bir gösterim çeşidi kalırsa bu en uygun eşleşme olarak seçilmiş olur
328 ve 3. adıma atlanır. Eğer birden fazla gösterim çeşidi kalırsa sonraki
332 <li><code>Accept</code> başlığındaki üstünlük katsayısı ile
333 gösterimin ortam türünde belirtilen kaynak üstünlüğünün çarpımı en
334 büyük olan gösterim çeşidi seçilir.</li>
336 <li>En yüksek dil üstünlük katsayısına sahip gösterim çeşidi seçilir.
339 <li>En uygun dil eşleşmesine sahip gösterim çeşidini seçmek için
340 önce varsa <code>Accept-Language</code> başlığındaki dil
341 sıralamasına bakılır, aksi takdirde <code>LanguagePriority</code>
342 yönergesi ile atanmışsa oradaki dil sıralamasına bakılır.</li>
344 <li>En yüksek ‘seviyeden’ ortam parametresine (text/html ortam türü
345 sürümünü belirtmekte kullanılır) sahip gösterim çeşitleri
348 <li><code>Accept-Charset</code> başlık satırında belirtilene bakarak
349 en uygun karakter kümesine sahip gösterim çeşitleri seçilir.
350 Alenen dışlanmadıkça ISO-8859-1 kabul edilebilir karakter
351 kümesidir. <code>text/*</code> ortam türüne sahip gösterim
352 çeşitlerinden belli bir karakter kümesi ile ilişkilendirilmemiş
353 olanların karakter kümesinin ISO-8859-1 olduğu varsayılır.</li>
355 <li>ISO-8859-1 karakter kümesi ile ilişkilendirilmemiş gösterim
356 çeşitleri seçilir. Böyle hiçbir gösterim yoksa bütün gösterimler
359 <li>En uygun kodlamaya sahip gösterim çeşitleri seçilir. Tarayıcı
360 tarafından kabul edilebilir kodlamaya sahip gösterim çeşitleri
361 varsa bunlar seçilir. Yoksa kodlanmış ve kodlanmamış gösterim
362 çeşitleri karışık olarak mevcutsa sadece kodlanmamış olanlar
363 seçilir. Eğer bütün gösterim çeşitlerinin sadece kodlanmış ya da
364 sadece kodlanmamış gösterimleri mevcutsa hepsi seçilir.</li>
366 <li>En küçük içerik uzunluğuna sahip gösterim çeşitleri seçilir.</li>
368 <li>Kalan gösterim çeşitlerinin ilki seçilir. Bu ilk, ya türeşlem
369 dosyasında listelenen ilk çeşittir ya da gösterimler bir dizinden
370 okunuyorsa ASCII kod sıralamasına göre ilk sıradaki dosya ismine
371 sahip gösterimdir.</li>
375 <li>Algoritma, artık seçilmiş en uygun gösterim çeşidine sahipse bu
376 artık yanıt olarak döndürülebilir. HTTP yanıt başlığı
377 <code>Vary</code>’ye uzlaşım boyutları atanır (tarayıcı ve
378 arabellekler özkaynağı kaydederken bu bilgiyi kullanırlar)
379 ve algoritma sonlandırılır.</li>
381 <li>Buraya gelinmişse hiçbir gösterim seçilmemiş demektir (hiçbiri
382 tarayıcı tarafından kabul edilebilir bulunmadığından dolayı).
383 Gövdesinde mevcut gösterim çeşitlerini listeleyen bir HTML belgesi 406
384 durum koduyla döndürülür (406: ‘kabul edilebilir bir gösterim yok’).
385 Ayrıca HTTP <code>Vary</code> başlığında gösterim çeşitliliğinin
386 boyutları belirtilir.</li>
391 <section id="better"><title>Üstünlük Değerleriyle Oynamak</title>
393 <p>httpd bazen yukarıdaki httpd uzlaşım algoritmasının kesin sonucunun
394 beklenenden farklı olması için üstünlük değerleriyle oynar. Bunu tam ve
395 doğru bilgi göndermeyen tarayıcılar için algoritmadan en iyi sonucu elde
396 etmek amacıyla yapar. Bazen günümüzün en tanınmış tarayıcıları bile çoğu
397 durumda yanlış bir seçimle sonuçlanmayacaksa <code>Accept</code> başlık
398 bilgilerini göndermemektedir. Eğer tarayıcı eksiksiz ve doğru bilgi
399 gönderirse httpd bu değerlerle oynamayacaktır.</p>
401 <section id="wildcards"><title>Ortam Türleri ve Dosyaismi Kalıpları</title>
403 <p><code>Accept:</code> istek başlığı ortam türü tercihlerini yansıtır.
404 Ayrıca, * bir dizge ile eşleşmek üzere "image/*" veya "*/*" gibi ortam
405 türü kalıpları da içerebilir. Dolayısıyla şöyle bir istek,</p>
407 <example>Accept: image/*, */*</example>
409 <p>diğer türler gibi "image/" ile başlayan ortam türlerini kabul
410 edilebilir kılacaktır. Bazı tarayıcılar ortam türlerini örtük olarak
411 elde etmek amacıyla hep bu tür kalıplar gönderirler. Örnek:</p>
414 Accept: text/html, text/plain, image/gif, image/jpeg, */*
417 <p>Bunun amacı, açıkça listelenmiş türlerin tercih edildiğini, fakat
418 farklı gösterimler varsa onların da kabul edilebileceğini belirtmektir.
419 Üstünlük değerlerini doğrudan kullanarak tarayıcılar gerçekte ne
420 istediklerini şuna benzer şekilde belirtebilirler:</p>
423 Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
426 <p>Açıkça belirtilen türler için üstünlük katsayısı belirtilmemiştir,
427 dolayısıyla üstünlük katsayılarının 1.0 (en yüksek) olduğu
428 varsayılmaktadır. */* kalıbı 0.01 gibi çok daha düşük bir öncelik
429 belirtmektedir. Bu bakımdan, ancak, açıkça belirtilen türlerden
430 hiçbirinin bulunmaması halinde diğer türler eşleşecektir.</p>
432 <p>Eğer <code>Accept:</code> başlığı <em>hiçbir</em> <code>q</code>
433 katsayısı içermiyorsa ve başlıkta "*/*" belirtilmişse, httpd istenen
434 davranışı taklit etmek için bu kalıba 0.01 katsayısını atar. Keza
435 "type/*" kalıbına da 0.02 katsayısını atar (yani, */* kalıbına göre
436 tercihli olur). Eğer <code>Accept:</code> alanındaki her ortam türü bir
437 <code>q</code> katsayısı içeriyorsa bu özel değerler uygulanmaz.
438 Dolayısıyla gerekli bilgiyi açıkça bildiren tarayıcılardan gelen
439 istekler umulduğu gibi işlem görecektir.</p>
442 <section id="exceptions"><title>Dil Uzlaşımında İstisnalar</title>
444 <p>httpd 2.0’dan itibaren, uzlaşım algoritmasına, bir eşleşme bulmak
445 konusunda algoritma başarılı olamadığı takdirde hoş bir son çareye izin
446 vermek için bazı istisnalar eklenmiştir.</p>
448 <p>İstemci sunucudan bir sayfa istediğinde, sunucu, tarayıcı tarafından
449 gönderilen <code>Accept-language</code> başlığıyla eşleşen tek bir sayfa
450 bulamadığı takdirde istemciye ya “Kabul edilebilir bir gösterim çeşidi
451 yok” ya da “Çok sayıda seçim belirtilmiş” yanıtını döndürür. Bu hata
452 iletilerinden kaçınmak için bu gibi durumlarda httpd
453 <code>Accept-language</code> başlığını yoksaymaya ayarlanabilir. Böylece
454 istemcinin isteğine tam olarak uymasa da bir belge sağlanır. Bu hata
455 iletilerinin birini veya her ikisini de geçersiz kılmak için <directive
456 module="mod_negotiation">ForceLanguagePriority</directive> yönergesi
457 kullanılabilir ve sunucunun kararını <directive
458 module="mod_negotiation">LanguagePriority</directive> yönergesine
459 dayanarak vermesi sağlanabilir.</p>
461 <p>Sunucu ayrıca, tam bir eşleşme bulunmadığı zaman lehçelerle de eşleşme
462 arayabilir. Örneğin, bir istemci Britanya İngilizcesi
463 (<code>en-GB</code>) ile yazılmış belgeler için istekte bulunursa,
464 sunucu normalde HTTP/1.1 standardına göre bir belgenin basitçe
465 <code>en</code> olarak imlenmesine izin vermez. (Bir okuyucu Britanya
466 İngilizcesini anlıyor ama genel İngilizceyi anlamıyor diye
467 <code>Accept-Language</code> başlığında <code>en</code> değil de
468 <code>en-GB</code>’yi belirtmesinin hemen hemen daima bir yapılandırma
469 hatasına yol açacağına dikkat ediniz. Maalesef, mevcut istemcilerin çoğu
470 öntanımlı yapılandırmalarında buna benzer şeyler yapmaktadır.) Bununla
471 birlikte, başka bir dille eşleşme mümkün değilse ve sunucu “Kabul
472 edilebilir bir gösterim çeşidi yok” hatasını döndürmeye hazırsa veya
473 <directive module="mod_negotiation" >LanguagePriority</directive> son
474 çaresine ayarlanmışsa alt küme belirtimini yok sayacak ve
475 <code>en</code> belge isteklerine <code>en-GB</code> belgelerle yanıt
476 verecektir. httpd, lehçenin üyesi olduğu anadili, istemcinin kabul
477 edilebilir diller listesine örtük olarak düşük bir üstünlük değeri ile
478 ekler. Yalnız şuna dikkat edin, eğer istemci tercihini "en-GB; q=0.9,
479 fr; q=0.8" olarak belirtirse ve sunucuda sadece "en" ve "fr" belgeleri
480 varsa sunucu "fr" belge ile yanıt verecektir. HTTP/1.1 belirtimi ile
481 uyumluluğu sağlamak ve düzgün yapılandırılmış istemcilerle gerektiği
482 gibi çalışabilmek için bu gereklidir.</p>
484 <p>Gelişmiş tekniklerin (çerezler, özel URL yolları gibi) desteklenmesi
485 sırasında, kullanıcının tercih ettiği dili saptamak için httpd 2.0.47
486 sürümünden beri <module>mod_negotiation</module> modülü
487 <code>prefer-language</code> <a href="env.html">ortam değişkenini</a>
488 tanımaktadır. Değişken mevcutsa ve uygun bir dil yaftası içeriyorsa
489 <module>mod_negotiation</module> uygun gösterimi seçmeyi deneyecektir.
490 Böyle bir gösterim çeşidi mevcut değilse normal uzlaşım işlemi
493 <example><title>Örnek</title>
494 SetEnvIf Cookie "language=(.+)" prefer-language=$1<br />
495 Header append Vary cookie
500 <section id="extensions">
501 <title>Şeffaf İçerik Uzlaşımının Genişletilmesi</title>
503 <p>httpd, şeffaf içerik uzlaşımı protokolünü (RFC 2295) şöyle genişletir:
504 Sadece içerik kodlamasına özgü olmak üzere gösterim çeşidi listelerinde
505 gösterim çeşitlerini imlemek için yeni bir <code>{encoding ..}</code>
506 elemanı kullanılır. RVSA/1.0 algoritmasının (RFC 2296) gerçeklenimi,
507 listedeki kodlanmış gösterim çeşitlerini tanımak ve onları
508 <code>Accept-Encoding</code> başlık alanıyla ilgili olarak kabul
509 edilebilir kodlamalara aday gösterim çeşitleri olarak kullanmak üzere
510 genişletilmiştir. RVSA/1.0 gerçeklenimi, en uygun gösterim çeşidi
511 seçiminin öncesinde hesaplanmış üstünlük katsayısını virgülden sonra beş
512 haneye yuvarlamaz.</p>
515 <section id="naming"><title>Hiperbağlar ve İsimlendirme Uzlaşımları</title>
517 <p>Eğer dil uzlaşımı kullanıyorsanız ve birden fazla dosya ismi uzantısına
518 sahip dosyalarınız varsa uzantıların sıralamasının normalde uygunsuz
519 düştüğü farklı isimlendirme yaklaşımlarında bulunabilirsiniz (ayrıntılar
520 için <a href="mod/mod_mime.html#multipleext">mod_mime</a> belgesine
523 <p>Bir MIME türü uzantısına sahip bir dosyanın (<code>html</code> gibi),
524 kodlanmış bir gösterimi (<code>gz</code> gibi) mevcut olabilir. Bu
525 dosyanın ayrıca farklı dillerdeki gösterimleri için de bir uzantısı
526 (<code>en</code> gibi) olabilir.</p>
531 <li>misal.en.html</li>
533 <li>misal.html.en</li>
535 <li>misal.en.html.gz</li>
538 <p>Hiperbağ olarak geçerli ve geçersiz bazı dosya ismi örnekleri:</p>
540 <table border="1" cellpadding="8" cellspacing="0">
541 <columnspec><column width=".2"/><column width=".2"/>
542 <column width=".2"/></columnspec>
546 <th>Geçerli Hiperbağ</th>
548 <th>Geçersiz Hiperbağ</th>
552 <td><em>misal.html.en</em></td>
561 <td><em>misal.en.html</em></td>
569 <td><em>misal.html.en.gz</em></td>
579 <td><em>misal.en.html.gz</em></td>
589 <td><em>misal.gz.html.en</em></td>
599 <td><em>misal.html.gz.en</em></td>
609 <p>Yukarıdaki tabloya bakarak hiperbağlarda bir dosya ismini uzantısız
610 olarak (<code>misal</code> gibi) kullanmanın daima mümkün olduğunu
611 farkedeceksiniz. Böylece bir belgenin asıl türünü gizleyebilir ve
612 sonradan bir hiperbağ değişikliği yapmaksızın örneğin
613 <code>html</code>’den <code>shtml</code> veya <code>cgi</code>’ye
616 <p>Hiperbağlarda MIME türlerini (<code>misal.html</code> gibi) kullanmaya
617 devam etmek istiyorsanız dil uzantısı MIME türü uzantısının sağında
618 kalmalıdır (<code>misal.html.en</code> gibi).</p>
621 <section id="caching"><title>Arabellekler Hakkında</title>
623 <p>Bir arabellek, bir gösterimi istek URL’si ile ilişkilendirerek saklar.
624 Böylece, sonradan aynı URL için bir istek yapıldığında kaydettiği
625 gösterimi kullanabilir. Fakat özkaynak sunucuyla uzlaşılan türdeyse
626 arabelleğe ilk istenen çeşit saklanmış olacağından isteğe yanlış
627 gösterimle yanıt verilmiş olacaktır. Bunun olmaması için httpd, normal
628 olarak içerik uzlaşımının sonucu olarak döndürülen tüm yanıtları
629 HTTP/1.0 istemciler tarafından arabelleklenemez olarak imler. httpd
630 ayrıca, uzlaşımlı yanıtların arabelleklenmesini mümkün kılan HTTP/1.1
631 protokolünü de destekler.</p>
633 <p>HTTP/1.0 uyumlu istemcilerden (bir tarayıcı veya arabellek) gelen
634 istekler için, uzlaşıma konu yanıtların arabelleklenmesini mümkün kılmak
635 üzere <directive module="mod_negotiation"
636 >CacheNegotiatedDocs</directive> yönergesi kullanılabilir. Bu yönerge
637 argümansızdır ve sunucu genelinde veya sanal konakların
638 yapılandırılmasında kullanılabilir. Bunun HTTP/1.1 istemcilerinden gelen
639 isteklere bir etkisi yoktur.</p>
641 <p>HTTP/1.1 istemciler için, httpd, yanıtın uzlaşım boyutlarını göstermek
642 üzere bir <code>Vary</code> HTTP yanıt başlığı gönderir. Arabellekler bu
643 bilgiyi sonraki istekleri yerel kopyadan sunarken kullanabilirler. Bir
644 arabelleğin uzlaşım boyutlarına bakmaksızın yerel kopyasını kullanmaya
645 teşvik etmek için <code>force-no-vary</code> <a href="env.html#special"
646 >ortam değişkenini</a> etkin kılabilirsiniz.</p>