İçeriğe geç
academia.sh

Ders 07 / 25

Meta Etiketleri

Karakter kümesi bildiriminin baytları nasıl yorumlattığı, kodlamayı belirleyen kaynakların önceliği, görüntü alanı bildirimi ve adlandırılmış üstveri.

İçindekiler

Önceki ders karakter başvurularını çözerken bir varsayımda bulundu: baytların hangi kurala göre karakterlere çevrildiği belliydi. Bu ders o varsayımı kaldırır ve baş bölümündeki üstveri etiketlerini, en belirleyici olanından başlayarak ele alır.

meta ögesi boş bir ögedir ve tek başına bir anlamı yoktur; anlamı taşıyan şey öznitelikleridir. Dört farklı işlevde kullanılır ve bunlar birbirinden bağımsızdır.

Karakter Kümesi Bildirimi

Bilgisayarlar Nasıl Çalışır kursundaki Karakter Kodlamaları dersi tek bir noktayı kurmuştu: bayt dizisi, hangi kurala göre yazıldığını kendi içinde söylemez. Aynı baytlar farklı kurallarla farklı karakterlere çözülür.

// charset.mjs — ayni baytlar, iki farkli kodlama varsayimi
const metin = "Sıcaklık: -4 °C";
const baytlar = Buffer.from(metin, "utf8");

const kodNoktalari = (d) =>
  [...d].map((k) => "U+" + k.codePointAt(0).toString(16).toUpperCase().padStart(4, "0")).join(" ");

console.log("baytlar         :", baytlar.toString("hex").match(/../g).join(" "));
console.log("bayt sayisi     :", baytlar.length);
console.log("karakter sayisi :", metin.length);
console.log("utf-8 okuma     :", baytlar.toString("utf8"));
console.log("latin1 okuma    :", baytlar.toString("latin1"));
console.log("utf-8 ilk uc    :", kodNoktalari(baytlar.toString("utf8").slice(0, 3)));
console.log("latin1 ilk bes  :", kodNoktalari(baytlar.toString("latin1").slice(0, 5)));

console.log("--- charset bildirimi belgenin ilk baytlarinda aranir ---");
const bas = '<!doctype html>\n<html lang="tr">\n<head>\n<meta charset="utf-8">\n';
console.log("bildirimin bittigi bayt :", Buffer.byteLength(bas));
console.log("1024 baytin altinda mi  :", Buffer.byteLength(bas) < 1024);
baytlar         : 53 c4 b1 63 61 6b 6c c4 b1 6b 3a 20 2d 34 20 c2 b0 43
bayt sayisi     : 18
karakter sayisi : 15
utf-8 okuma     : Sıcaklık: -4 °C
latin1 okuma    : Sıcaklık: -4 °C
utf-8 ilk uc    : U+0053 U+0131 U+0063
latin1 ilk bes  : U+0053 U+00C4 U+00B1 U+0063 U+0061
--- charset bildirimi belgenin ilk baytlarinda aranir ---
bildirimin bittigi bayt : 63
1024 baytin altinda mi  : true

c4 b1 bayt çifti, bir kuralda tek bir karaktere (U+0131, ı) çözülür; başka bir kuralda iki ayrı karaktere (U+00C4 ve U+00B1). Baytlar aynıdır; farklı olan yalnızca yorumdur. On sekiz bayt, birinci okumada on beş, ikinci okumada on sekiz karakter verir.

Belgenin bildirimi tek satırdır:

<meta charset="utf-8">

Bu satırın etkisi görsel değil, yapısaldır. Bildirim yanlışsa yalnızca birkaç karakter bozulmaz; belge farklı bir karakter dizisine çözülür ve etiket adları bile etkilenebilir.

Bildirimin Yeri Neden Önemli

Burada döngüsel bir sorun vardır. Bildirimin kendisi belgenin içindedir; onu okumak için belgeyi çözmek, çözmek için de bildirimi okumak gerekir.

Çözüm bir ön taramadır. Ayrıştırıcı belgenin ilk bölümünü —tanımlı sınır 1024 bayttır— tek baytlık bir varsayımla tarar ve yalnızca bir charset bildirimi arar. Bulursa belgeyi o kuralla ayrıştırmaya başlar.

Bunun iki sonucu vardır. Birincisi, bildirim ilk 1024 bayt içinde olmalıdır; baş bölümünün en başına yazılmasının nedeni budur. İkincisi, bildirim bu sınırın dışında kalır veya ön tarama sırasında varsayılan kuralla bulunamazsa, ayrıştırıcı yanlış kuralla başlamış olur; bildirimi sonradan gördüğünde ayrıştırmayı baştan yapması gerekir. Bu yeniden başlatma ölçülebilir bir maliyettir ve bildirimin konumuyla önlenir.

Kodlamayı Belirleyen Kaynaklar

Belgedeki meta bildirimi tek kaynak değildir. Sıralı bir öncelik listesi vardır.

Öncelik Kaynak
1 Bayt sırası imi (BOM)
2 Kullanıcının açık seçimi
3 Taşıma katmanı: HTTP Content-Type başlığındaki charset
4 Belgedeki meta charset bildirimi
5 Sezme ve varsayılan

Bayt sırası imi kavramı Bilgisayarlar Nasıl Çalışır kursundaki Bayt Sırası dersinde tanımlanmıştı; belgenin başındaki birkaç bayt kodlamayı belirtir ve her şeyi bastırır.

Üçüncü sıra dikkat gerektirir: HTTP başlığı belgedeki bildirimi bastırır. İnternet Nasıl Çalışır kursundaki HTTP İstek ve Yanıtı dersinde Content-Type başlığının bir charset parametresi taşıdığı görülmüştü. O parametre, belgede başka bir bildirim olsa bile geçerlidir. Sunucu yapılandırması ile belge birbiriyle çelişiyorsa kazanan sunucudur; bu, bozuk görünen karakterlerin belgede aranıp bulunamadığı durumların sık nedenidir.

Beşinci sıra bir güvence değildir. Sezme, belgenin içeriğine bakarak tahmin yürütür ve tahmin yanlış olabilir. Bildirim yazmamak, sonucun ortama bırakılması demektir.

Görüntü Alanı Bildirimi

İkinci meta kullanımı, belgenin dar ekranlarda nasıl ölçekleneceğini bildirir.

<meta name="viewport" content="width=device-width, initial-scale=1">

Bu bildirimin gerekçesi tarihseldir. Dar ekranlı aygıtlar, dar ekran için yazılmamış belgeleri okunabilir kılmak üzere geniş bir sanal görüntü alanı varsayar ve sayfayı küçültür. Bildirim bu varsayımı kapatır: görüntü alanının genişliği aygıtın kendi genişliği sayılır ve başlangıç ölçeği birdir.

Bildirimin kendisi bir sunum kararı değildir; sunum katmanının hangi genişlik üzerinde hesap yapacağını belirler. Bu nedenle dar ekranı gözeten her belgede bulunur ve sonraki kursta ele alınacak duyarlı düzenin ön koşuludur.

user-scalable=no gibi ölçeklemeyi kapatan değerler yazılabilir. Yazılmamalıdır: büyütme, görme gücü sınırlı kullanıcılar için tek erişim yoludur ve kapatılması bir erişilebilirlik ihlalidir.

Adlandırılmış Üstveri

Üçüncü kullanım, name ve content çiftiyle belgeye ilişkin bilgi bildirir. Bu bilgi çizilmez; belgeyi işleyen programlar için taşınır.

<meta name="description" content="Kuzey Yamaç otomatik ölçüm istasyonunun
      sıcaklık, bağıl nem, rüzgâr hızı ve yağış kayıtları.">
<meta name="robots" content="index, follow">
<meta name="author" content="Ölçüm Ağı Çalışma Grubu">

description değeri, belgenin arama sonuçlarında görünen özeti olarak kullanılabilir. Kullanılacağı garanti değildir — dizinleyiciler belgenin içeriğinden daha uygun bir özet üretmeyi seçebilir. Yazılması yine de gerekçelidir: yazılmadığında seçim bütünüyle dizinleyiciye kalır.

robots değeri dizinleyicilere belgenin dizinlenip dizinlenmeyeceğini ve bağlantılarının izlenip izlenmeyeceğini bildirir. Bu bir erişim denetimi değildir; bildirime uymayan bir istemci belgeyi yine de okur. Gizlilik gerektiren içerik yetkilendirmeyle korunur, üstveriyle değil.

Belgeyi başka ortamlarda önizleyen sistemler için ayrı üstveri sözleşmeleri vardır; bunlar meta ögesinin aynı düzeneğini kullanır ve başlık, açıklama, görsel adresi gibi alanları bildirir. Sözleşme adları platformdan platforma değişir; ortak nokta, önizlemenin belgenin içeriğinden tahmin edilmesi yerine açıkça bildirilmesidir.

Eşdeğer Başlıklar

Dördüncü kullanım, http-equiv özniteliğiyle bir HTTP yanıt başlığının eşdeğerini bildirir.

<meta http-equiv="content-security-policy" content="default-src 'self'">

Bu düzenek, sunucu başlıklarını değiştirme olanağı olmayan durumlar içindir. Olanak varsa gerçek başlık yeğlenir: başlık belge ayrıştırılmadan önce geçerli olur, http-equiv bildirimi ise ayrıştırıcı oraya vardığında. Aradaki fark, güvenlik bildirimlerinde belirleyicidir.

İstasyon Belgesinin Baş Bölümü

Kurs boyunca geliştirilen belgenin baş bölümü şu hâle gelir:

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Kuzey Yamaç Ölçüm İstasyonu — Ölçüm Ağı</title>
  <meta name="description" content="Kuzey Yamaç otomatik ölçüm istasyonunun sıcaklık,
        bağıl nem, rüzgâr hızı ve yağış kayıtları.">
</head>

Sıra rastlantısal değildir: kodlama bildirimi ilk sıradadır, çünkü kendisinden sonraki her şeyin nasıl okunacağını belirler. title ögesi, önceki derste belirtildiği gibi belgeyi bağlamı dışında adlandırır ve burada site adını da taşır.

Özet

  • Karakter kümesi bildirimi baytların hangi kuralla karakterlere çevrileceğini söyler; yanlış bildirim belgenin tamamını farklı bir karakter dizisine çözer.
  • Bildirim, ayrıştırıcının ön taraması nedeniyle ilk 1024 bayt içinde olmalıdır; geç bulunması ayrıştırmanın baştan yapılmasına yol açar.
  • Kodlamayı belirleyen kaynakların önceliği vardır ve HTTP başlığı belgedeki bildirimi bastırır.
  • Görüntü alanı bildirimi, sunum katmanının hangi genişlik üzerinde hesap yapacağını belirler; ölçeklemeyi kapatan değerler erişilebilirliği bozar.
  • Adlandırılmış üstveri belgeyi işleyen programlar içindir ve bağlayıcı değildir; dizinleme bildirimleri bir erişim denetimi sağlamaz.
  • http-equiv bildirimleri gerçek HTTP başlıklarının yerini tutar ancak daha geç geçerli olur; olanak varsa başlık yeğlenir.

Sonraki Adım

Baş bölümü tamamlandı; sıra gövdededir. Gövdenin ilk yapısal kararı başlıklardır: belgenin hangi bölümlere ayrıldığını ve bu bölümlerin birbirine göre düzeyini bildiren etiketler. Sonraki ders başlık düzeyinin neden bir yazı tipi ölçüsü değil bir yapı bildirimi olduğunu ve düzeyi atlamanın belgenin ana hattını nasıl bozduğunu gösterir.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat