1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
|
<?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: 1450091 -->
<!-- =====================================================
Translated by: Nilgün Belma Bugüner <nilgun belgeler.gen.tr>
Reviewed by: Orhan Berent <berent belgeler.gen.tr>
========================================================== -->
<!--
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>
<highlight language="config">AddHandler type-map .var</highlight>
<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>
<highlight language="config">DirectoryIndex index</highlight>
<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>
<highlight language="config">
SetEnvIf Cookie "language=(.+)" prefer-language=$1
Header append Vary cookie
</highlight>
</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>
|