| <?xml version='1.0' encoding='UTF-8' ?> |
| <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd"> |
| <?xml-stylesheet type="text/xsl" href="./style/manual.tr.xsl"?> |
| <!-- English Revision: 1174747:1673932 (outdated) --> |
| <!-- ===================================================== |
| Translated by: Nilgün Belma Bugüner <nilgun belgeler.org> |
| Reviewed by: Orhan Berent <berent belgeler.org> |
| ========================================================== --> |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <manualpage metafile="content-negotiation.xml.meta"> |
| |
| <title>İçerik Uzlaşımı</title> |
| |
| <summary> |
| |
| <p>Apache HTTPD, 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.</p> |
| |
| <p>İçerik uzlaşımı öntanımlı olarak derlenen |
| <module>mod_negotiation</module> modülü tarafından sağlanır.</p> |
| </summary> |
| |
| <section id="about"><title>İçerik Uzlaşımı Hakkında</title> |
| |
| <p>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:</p> |
| |
| <example>Accept-Language: tr</example> |
| |
| <p>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.</p> |
| |
| <p>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:</p> |
| |
| <example> |
| Accept-Language: fr; q=1.0, en; q=0.5<br /> |
| 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 |
| </example> |
| |
| <p>httpd, HTTP/1.1 belirtiminde tanımlanan şekliyle ‘sunucu yönetiminde’ |
| içerik uzlaşımını destekler. <code>Accept</code>, |
| <code>Accept-Language</code>, <code>Accept-Charset</code> ve |
| <code>Accept-Encoding</code> istek başlıklarını tamamen destekler. |
| httpd 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.</p> |
| |
| <p>Bir <strong>özkaynak</strong> 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 <strong>uzlaşılabilir</strong> |
| olduğundan ve her gösteriminin bir <strong>çeşitlilik</strong> |
| oluşturduğundan bunun da uzlaşımın <strong>boyutlar</strong>ından |
| kaynaklandığından bahsedilebilir.</p> |
| </section> |
| |
| <section id="negotiation"><title>httpd’de İçerik Uzlaşımı</title> |
| |
| <p>Bir özkaynak üzerinde uzlaşılırken gösterim çeşitlerinin her biri |
| hakkında sunucuya bilgi verilmesi gerekir. Bu iki yolla yapılabilir:</p> |
| |
| <ul> |
| <li>Ya gösterim çeşitlerini içeren dosyaların isimleriyle eşleşmeyi |
| sağlayan bir tür eşlemi kullanılır (bir <code>*.var</code> dosyası |
| gibi).</li> |
| |
| <li>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.</li> |
| </ul> |
| |
| <section id="type-map"><title>Bir türeşlem dosyası kullanmak</title> |
| |
| <p>Bir türeşlem dosyası, <code>type-map</code> eylemcisi ile ilişkili bir |
| belgedir (ya da eski httpd yapılandırmaları ile geriye uyumluluk için, |
| <code>application/x-type-map</code> <glossary>MIME türü</glossary>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 <code>type-map</code> |
| eylemcisi tanımlamalısınız. Bu, sunucu yapılandırma dosyasında en iyi |
| şöyle yapılabilir:</p> |
| |
| <example>AddHandler type-map .var</example> |
| |
| <p>Türeşlem dosyaları kendilerini tanımlayan özkaynak ile aynı isimde |
| olmalı ve isim bir <code>.var</code> uzantısı içermelidir. Aşağıdaki |
| örneklerde özkaynak ismi <code>foo</code> olduğundan türeşlem dosyasının |
| ismi <code>foo.var</code>'dır.</p> |
| |
| <p>Bu dosya 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.</p> |
| |
| <p>Bu dosyadaki URI'ler türeşlem dosyasının yerine görelidir. Dolayısıyla, |
| bu dosyaların aynı dizinde bulunması beklenirse de bu gerekli değildir. |
| Aynı sunucuda bulunan tüm dosyalar için türeşlem dosyasındaki gibi mutlak |
| veya göreli URI'ler belirtebilirsiniz.</p> |
| |
| <example> |
| URI: misal<br /> |
| <br /> |
| URI: misal.en.html<br /> |
| Content-type: text/html<br /> |
| Content-language: en<br /> |
| <br /> |
| URI: misal.fr.de.html<br /> |
| Content-type: text/html;charset=iso-8859-2<br /> |
| Content-language: fr, de<br /> |
| </example> |
| |
| <p>Ayrıca, <code>MultiViews</code> 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 <code>qs</code> |
| parametresi kullanılarak kaynak üstünlükleri belirtilebilir: </p> |
| |
| <example> |
| URI: misal<br /> |
| <br /> |
| URI: misal.jpeg<br /> |
| Content-type: image/jpeg; <strong>qs=0.8</strong><br /> |
| <br /> |
| URI: misal.gif<br /> |
| Content-type: image/gif; <strong>qs=0.5</strong><br /> |
| <br /> |
| URI: misal.txt<br /> |
| Content-type: text/plain; <strong>qs=0.01</strong><br /> |
| </example> |
| |
| <p><code>qs</code> değerleri 0.000-1.000 değer aralığı içinde |
| belirtilebilir. 0.000 <code>qs</code> değerine sahip gösterimin asla |
| seçilmeyeceğine dikkat ediniz. Bir <code>qs</code> değeri belirtilmeyen |
| gösterimlerin kaynak üstünlüğü 1.000 kabul edilir. <code>qs</code> |
| 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 <code>qs</code> değeri özkaynağın |
| doğasına bakarak belirlenir.</p> |
| |
| <p>Tanınan başlıkların tam listesini <a |
| href="mod/mod_negotiation.html#typemaps" >mod_negotiation</a> modülünün |
| belgesinde bulabilirsiniz.</p> |
| </section> |
| |
| <section id="multiviews"><title>Çoklu Görünümler</title> |
| |
| <p><code>MultiViews</code>, <code>httpd.conf</code> dosyasındaki veya |
| (<directive module="core">AllowOverride</directive> yönergesinin |
| değerine bağlı olarak) <code>.htaccess</code> dosyalarındaki <directive |
| module="core" type="section">Directory</directive>, <directive |
| module="core" type="section">Location</directive> veya <directive |
| module="core" type="section">Files</directive> bölümleri içinde |
| <directive module="core">Options</directive> yönergeleri ile |
| belirtilebilen, dizine özgü bir seçenektir. Yalnız, dikkatli olun, |
| <code>Options All</code> yaparak <code>MultiViews</code> seçeneğini |
| etkin kılamazsınız; seçeneği ismiyle açıkça belirtmelisiniz.</p> |
| |
| <p><code>MultiViews</code> şöyle etki eder: Sunucudan, |
| <code>MultiViews</code> seçeneğinin etkin olduğu <code>/bir/dizin</code> |
| dizininden <code>filanca</code> dosyası için bir istekte bulunulmuşsa |
| fakat dizinde bu dosya yoksa, sunucu dizin içeriğini |
| <code>filanca.*</code> 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.</p> |
| |
| <p><code>MultiViews</code> ayrıca, sunucunun bir dizin içeriğini |
| listelemeye çalıştığı durumda <directive module="mod_dir" |
| >DirectoryIndex</directive> yönergesi ile belirtilen dosya için de bir |
| arama tertipleyebilir. Eğer yapılandırma dosyalarında</p> |
| |
| <example>DirectoryIndex index</example> |
| |
| <p>şeklinde bir atama varsa ve dizinde <code>index.html</code> ve |
| <code>index.html3</code> dosyaları varsa sunucu bunlar arasından hakem |
| sıfatıyla bir seçim yapacaktır; ama bu ikisi yerine dizinde sadece |
| <code>index.cgi</code> mevcutsa sunucu sadece bu dosyayı |
| çalıştıracaktır.</p> |
| |
| <p>Okunan dizinde bulunan dosyalar arasında <code>mod_mime</code> |
| 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ç <directive module="mod_mime">MultiViewsMatch</directive> |
| 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.</p> |
| </section> |
| </section> |
| |
| <section id="methods"><title>Uzlaşım Yöntemleri</title> |
| |
| <p>httpd’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. httpd’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.</p> |
| |
| <p>İki uzlaşım yöntemi vardır:</p> |
| |
| <ol> |
| <li>Normal durumda <strong>sunucu yönetiminde httpd uzlaşım |
| algoritması</strong> kullanılır. Bu algoritma aşağıda ayrıntılı olarak |
| açıklanmıştır. Bu algoritma kullanıldığı zaman, httpd, en iyi sonuca |
| ulaşmak için bazen belli boyutların üstünlük katsayılarıyla ‘oynar’. |
| httpd’nin bu katsayılarla oynama işini nasıl yaptığı aşağıda daha |
| ayrıntılı açıklanmıştır.</li> |
| |
| <li>İstemci bu işlem için özellikle RFC 2295’te tanımlanan mekanizmanın |
| kullanılmasını isterse <strong>şeffaf içerik uzlaşımı</strong> |
| 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ı httpd’den isteyebilir.</li> |
| </ol> |
| |
| <section id="dimensions"><title>Uzlaşımın Boyutları</title> |
| |
| <table> |
| <columnspec><column width=".15"/><column width=".85"/></columnspec> |
| <tr valign="top"> |
| <th>Boyut</th> |
| |
| <th>Açıklama</th> |
| </tr> |
| |
| <tr valign="top"> |
| <td>Ortam Türü</td> |
| |
| <td>Tarayıcı ortam türü tercihlerini <code>Accept</code> 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 |
| (<code>qs</code> parametresi) sahip olabilir.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td>Dil</td> |
| |
| <td>Tarayıcı dil tercihlerini <code>Accept-Language</code> 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.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td>Kodlama</td> |
| |
| <td>Tarayıcı kodlama tercihlerini <code>Accept-Encoding</code> başlık |
| alanı ile belirtir. Her öğenin kendine özgü bir üstünlük katsayısı |
| olabilir.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td>Karakter Kümesi</td> |
| |
| <td>Tarayıcı karakter kümesi tercihlerini <code>Accept-Charset</code> |
| 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.</td> |
| </tr> |
| </table> |
| </section> |
| |
| <section id="algorithm"><title>httpd Uzlaşım Algoritması</title> |
| |
| <p>httpd, 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:</p> |
| |
| <ol> |
| <li>Önce her uzlaşım boyutu için ilgili <em>Accept*</em> 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 <em>Accept*</em> başlığı |
| uygulanabilir değilse bu boyut elenir ve sonuçta hiçbir gösterim |
| çeşidi kalmasza 4. adıma atlanır.</li> |
| |
| <li>‘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. |
| |
| <ol> |
| <li><code>Accept</code> 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.</li> |
| |
| <li>En yüksek dil üstünlük katsayısına sahip gösterim çeşidi seçilir. |
| </li> |
| |
| <li>En uygun dil eşleşmesine sahip gösterim çeşidini seçmek için |
| önce varsa <code>Accept-Language</code> başlığındaki dil |
| sıralamasına bakılır, aksi takdirde <code>LanguagePriority</code> |
| yönergesi ile atanmışsa oradaki dil sıralamasına bakılır.</li> |
| |
| <li>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.</li> |
| |
| <li><code>Accept-Charset</code> 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. <code>text/*</code> 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.</li> |
| |
| <li>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.</li> |
| |
| <li>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.</li> |
| |
| <li>En küçük içerik uzunluğuna sahip gösterim çeşitleri seçilir.</li> |
| |
| <li>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.</li> |
| </ol> |
| </li> |
| |
| <li>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ığı |
| <code>Vary</code>’ye uzlaşım boyutları atanır (tarayıcı ve |
| arabellekler özkaynağı kaydederken bu bilgiyi kullanırlar) |
| ve algoritma sonlandırılır.</li> |
| |
| <li>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 <code>Vary</code> başlığında gösterim çeşitliliğinin |
| boyutları belirtilir.</li> |
| </ol> |
| </section> |
| </section> |
| |
| <section id="better"><title>Üstünlük Değerleriyle Oynamak</title> |
| |
| <p>httpd bazen yukarıdaki httpd 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 <code>Accept</code> başlık |
| bilgilerini göndermemektedir. Eğer tarayıcı eksiksiz ve doğru bilgi |
| gönderirse httpd bu değerlerle oynamayacaktır.</p> |
| |
| <section id="wildcards"><title>Ortam Türleri ve Dosyaismi Kalıpları</title> |
| |
| <p><code>Accept:</code> 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,</p> |
| |
| <example>Accept: image/*, */*</example> |
| |
| <p>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:</p> |
| |
| <example> |
| Accept: text/html, text/plain, image/gif, image/jpeg, */* |
| </example> |
| |
| <p>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:</p> |
| |
| <example> |
| Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01 |
| </example> |
| |
| <p>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.</p> |
| |
| <p>Eğer <code>Accept:</code> başlığı <em>hiçbir</em> <code>q</code> |
| katsayısı içermiyorsa ve başlıkta "*/*" belirtilmişse, httpd 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 <code>Accept:</code> alanındaki her ortam türü bir |
| <code>q</code> 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.</p> |
| </section> |
| |
| <section id="exceptions"><title>Dil Uzlaşımında İstisnalar</title> |
| |
| <p>httpd 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.</p> |
| |
| <p>İstemci sunucudan bir sayfa istediğinde, sunucu, tarayıcı tarafından |
| gönderilen <code>Accept-language</code> 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 httpd |
| <code>Accept-language</code> 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 <directive |
| module="mod_negotiation">ForceLanguagePriority</directive> yönergesi |
| kullanılabilir ve sunucunun kararını <directive |
| module="mod_negotiation">LanguagePriority</directive> yönergesine |
| dayanarak vermesi sağlanabilir.</p> |
| |
| <p>Sunucu ayrıca, tam bir eşleşme bulunmadığı zaman lehçelerle de eşleşme |
| arayabilir. Örneğin, bir istemci Britanya İngilizcesi |
| (<code>en-GB</code>) ile yazılmış belgeler için istekte bulunursa, |
| sunucu normalde HTTP/1.1 standardına göre bir belgenin basitçe |
| <code>en</code> olarak imlenmesine izin vermez. (Bir okuyucu Britanya |
| İngilizcesini anlıyor ama genel İngilizceyi anlamıyor diye |
| <code>Accept-Language</code> başlığında <code>en</code> değil de |
| <code>en-GB</code>’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 |
| <directive module="mod_negotiation" >LanguagePriority</directive> son |
| çaresine ayarlanmışsa alt küme belirtimini yok sayacak ve |
| <code>en</code> belge isteklerine <code>en-GB</code> belgelerle yanıt |
| verecektir. httpd, 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.</p> |
| |
| <p>Gelişmiş tekniklerin (çerezler, özel URL yolları gibi) desteklenmesi |
| sırasında, kullanıcının tercih ettiği dili saptamak için httpd 2.0.47 |
| sürümünden beri <module>mod_negotiation</module> modülü |
| <code>prefer-language</code> <a href="env.html">ortam değişkenini</a> |
| tanımaktadır. Değişken mevcutsa ve uygun bir dil yaftası içeriyorsa |
| <module>mod_negotiation</module> uygun gösterimi seçmeyi deneyecektir. |
| Böyle bir gösterim çeşidi mevcut değilse normal uzlaşım işlemi |
| uygulanacaktır.</p> |
| |
| <example><title>Örnek</title> |
| SetEnvIf Cookie "language=(.+)" prefer-language=$1<br /> |
| Header append Vary cookie |
| </example> |
| </section> |
| </section> |
| |
| <section id="extensions"> |
| <title>Şeffaf İçerik Uzlaşımının Genişletilmesi</title> |
| |
| <p>httpd, ş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 <code>{encoding ..}</code> |
| elemanı kullanılır. RVSA/1.0 algoritmasının (RFC 2296) gerçeklenimi, |
| listedeki kodlanmış gösterim çeşitlerini tanımak ve onları |
| <code>Accept-Encoding</code> 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.</p> |
| </section> |
| |
| <section id="naming"><title>Hiperbağlar ve İsimlendirme Uzlaşımları</title> |
| |
| <p>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 <a href="mod/mod_mime.html#multipleext">mod_mime</a> belgesine |
| bakınız).</p> |
| |
| <p>Bir MIME türü uzantısına sahip bir dosyanın (<code>html</code> gibi), |
| kodlanmış bir gösterimi (<code>gz</code> gibi) mevcut olabilir. Bu |
| dosyanın ayrıca farklı dillerdeki gösterimleri için de bir uzantısı |
| (<code>en</code> gibi) olabilir.</p> |
| |
| <p>Örnekler:</p> |
| |
| <ul> |
| <li>misal.en.html</li> |
| |
| <li>misal.html.en</li> |
| |
| <li>misal.en.html.gz</li> |
| </ul> |
| |
| <p>Hiperbağ olarak geçerli ve geçersiz bazı dosya ismi örnekleri:</p> |
| |
| <table border="1" cellpadding="8" cellspacing="0"> |
| <columnspec><column width=".2"/><column width=".2"/> |
| <column width=".2"/></columnspec> |
| <tr> |
| <th>Dosya ismi</th> |
| |
| <th>Geçerli Hiperbağ</th> |
| |
| <th>Geçersiz Hiperbağ</th> |
| </tr> |
| |
| <tr> |
| <td><em>misal.html.en</em></td> |
| |
| <td>misal<br /> |
| misal.html</td> |
| |
| <td>-</td> |
| </tr> |
| |
| <tr> |
| <td><em>misal.en.html</em></td> |
| |
| <td>misal</td> |
| |
| <td>misal.html</td> |
| </tr> |
| |
| <tr> |
| <td><em>misal.html.en.gz</em></td> |
| |
| <td>misal<br /> |
| misal.html</td> |
| |
| <td>misal.gz<br /> |
| misal.html.gz</td> |
| </tr> |
| |
| <tr> |
| <td><em>misal.en.html.gz</em></td> |
| |
| <td>misal</td> |
| |
| <td>misal.html<br /> |
| misal.html.gz<br /> |
| misal.gz</td> |
| </tr> |
| |
| <tr> |
| <td><em>misal.gz.html.en</em></td> |
| |
| <td>misal<br /> |
| misal.gz<br /> |
| misal.gz.html</td> |
| |
| <td>misal.html</td> |
| </tr> |
| |
| <tr> |
| <td><em>misal.html.gz.en</em></td> |
| |
| <td>misal<br /> |
| misal.html<br /> |
| misal.html.gz</td> |
| |
| <td>misal.gz</td> |
| </tr> |
| </table> |
| |
| <p>Yukarıdaki tabloya bakarak hiperbağlarda bir dosya ismini uzantısız |
| olarak (<code>misal</code> gibi) kullanmanın daima mümkün olduğunu |
| farkedeceksiniz. Böylece bir belgenin asıl türünü gizleyebilir ve |
| sonradan bir hiperbağ değişikliği yapmaksızın örneğin |
| <code>html</code>’den <code>shtml</code> veya <code>cgi</code>’ye |
| geçebilirsiniz.</p> |
| |
| <p>Hiperbağlarda MIME türlerini (<code>misal.html</code> gibi) kullanmaya |
| devam etmek istiyorsanız dil uzantısı MIME türü uzantısının sağında |
| kalmalıdır (<code>misal.html.en</code> gibi).</p> |
| </section> |
| |
| <section id="caching"><title>Arabellekler Hakkında</title> |
| |
| <p>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 httpd, 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. httpd |
| ayrıca, uzlaşımlı yanıtların arabelleklenmesini mümkün kılan HTTP/1.1 |
| protokolünü de destekler.</p> |
| |
| <p>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 <directive module="mod_negotiation" |
| >CacheNegotiatedDocs</directive> 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.</p> |
| |
| <p>HTTP/1.1 istemciler için, httpd, yanıtın uzlaşım boyutlarını göstermek |
| üzere bir <code>Vary</code> 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 <code>force-no-vary</code> <a href="env.html#special" |
| >ortam değişkenini</a> etkin kılabilirsiniz.</p> |
| |
| </section> |
| </manualpage> |