Content-Type: text/html; charset=utf-8 içeren, belge başlığını ve açıklamasını belge üstbilgisinde, okunabilir içeriği de gövdede barındıran tek bir HTML belgesi sunun. Mac için bu adım adım kılavuz, örnek bir sayfa oluşturur ve tek bir yanıtın bu üçünü de içerdiğini denetler.
Görev, aynı yapıyı bir yayın sistemine aktarmadan önce yerel bir önizleme kullanarak tarayıcıda okunabilir, herkese açık bir belge hazırlamaktır. Örnek, kâğıt şekilleri hakkında tamamen uydurma metinler içerir ve harici kaynak gerektirmez.
Tek bir tür belirtilmiş HTTP yanıtında neler bulunur?
“Tür belirtilmiş” olması, yanıtın medya türünü beyan ettiği anlamına gelir. Content-Type alanı, alıcıya temsilin biçimini ve nasıl işlenmesinin amaçlandığını bildirir. Buradaki biçim HTML’dir. Bu alan, uygulama için alan alan tanımlanmış bir şema sağlamaz. RFC 9110, bölüm 8.3
Bir HTTP/1.1 yanıtında durum satırı, üstbilgi alanları, boş bir satır ve isteğe bağlı bir gövde bulunur. Dolayısıyla ayrı bir meta veri isteği oluşturmadan, taşıma meta verilerini üstbilgilerde ve belgenin tamamını gövdede gönderebilirsiniz. RFC 9112, bölüm 2.1
Bu yayınlama görevi için aşağıdaki yerleşim kılavuzunu kullanın. Kılavuz, HTTP temsilini açıklayan bilgilerle sayfayı açıklayan bilgileri birbirinden ayırır.
| Bilgi | Konum | Örnek |
|---|---|---|
| Temsil biçimi ve kodlama | HTTP üstbilgisi | Content-Type: text/html; charset=utf-8 |
| Belge başlığı | HTML üstbilgisi | <title>Paper Shapes: Circle and Square</title> |
| Sayfa özeti | HTML üstbilgisi | <meta name="description" content="A short guide to arranging paper circles and squares."> |
| Okuyucuya sunulan içerik | HTML gövdesi | Başlık, giriş ve yerleştirme yönergeleri |
WHATWG, title öğesini belgenin başlığı veya adı; description meta veri değerini ise sayfanın açıklaması olarak tanımlar. Bir title ve en fazla bir description bildirimi kullanın. Bunların HTML belgesinde yer alması, içeriğin ve açıklayıcı meta verilerin birlikte iletilmesini sağlar. HTML Standard: Belge meta verileri
Mac’te çalışan bir önizlemeyi nasıl oluşturursunuz?
Terminal uygulamasını açın ve kullanılabilir komutları denetleyin:
python3 --version
curl --version
Aşağıdaki program Python 3.7 veya üzerini gerektirir ve yalnızca standart kitaplığını kullanır. python3 kullanılamıyorsa resmi macOS yükleme yönergelerini izleyin ve ardından Terminal uygulamasını yeniden açın. Python belgelerinde hem yükleyici hem de bir terminalden python3 çalıştırma açıklanır. macOS’ta Python kullanımı
Açılış komutu ve son PY satırı dâhil olmak üzere aşağıdaki bloğun tamamını Terminal uygulamasına yapıştırın. Bu işlem programı doğrudan çalıştırır; dosya oluşturmaz veya üzerine yazmaz. Sayfayı denetlerken bu terminal penceresini açık bırakın.
python3 - <<'PY'
from html import escape
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
TITLE = "Paper Shapes: Circle and Square"
SUMMARY = "A short guide to arranging paper circles and squares."
PAGE = f"""<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{escape(TITLE)}</title>
<meta name="description" content="{escape(SUMMARY, quote=True)}">
</head>
<body>
<main>
<h1>{escape(TITLE)}</h1>
<p>{escape(SUMMARY)}</p>
<h2>Try a simple arrangement</h2>
<p>Place one paper circle beside one paper square.</p>
<p>Switch their positions — then compare the two arrangements.</p>
</main>
</body>
</html>
""".encode("utf-8")
class Handler(BaseHTTPRequestHandler):
protocol_version = "HTTP/1.1"
def respond(self, include_body):
if self.path != "/paper-shapes":
self.send_error(404, "Page not found")
return
self.send_response(200)
self.send_header("Content-Type", "text/html; charset=utf-8")
self.send_header("Content-Length", str(len(PAGE)))
self.end_headers()
if include_body:
self.wfile.write(PAGE)
def do_GET(self):
self.respond(True)
def do_HEAD(self):
self.respond(False)
if __name__ == "__main__":
with ThreadingHTTPServer(("127.0.0.1", 8000), Handler) as server:
print("Preview: http://127.0.0.1:8000/paper-shapes", flush=True)
try:
server.serve_forever()
except KeyboardInterrupt:
pass
PY
İşleyici, Python’ın belgelenmiş yanıt yöntemlerini kullanır: send_response() yanıtı başlatır, send_header() alanları ekler ve end_headers() gövde baytları yazılmadan önce üstbilgi bölümünü tamamlar. Python HTTP sunucusu belgeleri
Örnek, TITLE ve SUMMARY değerlerini bilerek birer kez tanımlar. Bu değerler hem meta verileri hem de görünür metni sağlar; böylece bu küçük belgede tutarlılığı koruyarak değişiklik yapmak kolaylaşır. Daha uzun bir sayfada açıklama, aynı konuyu doğru biçimde özetlemek şartıyla açılış paragrafından farklı olabilir.
Sayfanın uzunluğu hesaplanmadan önce sayfa kodlanır. HTTP, Content-Length değerini karakter olarak değil sekizli baytlar, yani baytlar cinsinden tanımlar; bu örnekteki uzun çizgiyi karakter olarak saymak yanlış sonuç verirdi. RFC 9110, bölüm 8.6
İçeriğin ve meta verilerin birlikte geldiğini nasıl doğrularsınız?
İkinci bir Terminal penceresi açıp bu komutu çalıştırın. Komut, normal bir belge isteği yapar ve hem yanıt üstbilgilerini hem de içeriği görüntüler:
curl -i --max-time 10 http://127.0.0.1:8000/paper-shapes
-i seçeneği, yanıt üstbilgilerini gövdeyle aynı çıktı akışına ekler. Süre sınırı, aktarımı on saniyeyle sınırlar. Bu seçenekler curl komut satırı kılavuzunda belgelenmiştir.
Çıktıyı sırayla denetleyin:
- Durum satırında
200 OKyazmalıdır. - Tek bir
Content-Typealanıtext/html; charset=utf-8değerini belirtmelidir. - Üstbilgi bölümündeki boş satırdan sonra HTML, başlığı ve açıklamayı içermelidir.
- Aynı gövde, kâğıt şekillerine ilişkin yönergeleri içermelidir.
- Uzun çizgi, çözümlenmiş metinde doğru görünmelidir.
Ardından Safari’nin adres çubuğuna http://127.0.0.1:8000/paper-shapes yazın. Görüntülenen sayfada başlık, özet ve yönergeler görünmelidir. Açıklama bildirimi meta veridir; varlığı, sayfanın nasıl göründüğünden çıkarılmak yerine döndürülen işaretlemede denetlenir.
Yalnızca üstbilgi yolunu da denetleyebilirsiniz:
curl -I --max-time 10 http://127.0.0.1:8000/paper-shapes
Bu, HEAD gönderir; bu nedenle gövdenin başlığı veya açıklamayı içerdiğini doğrulayamaz. HEAD yanıtı, ilgili temsili açıklarken içeriği dışarıda bırakır; gerçek belgeyi incelemek için daha önceki GET denetimini kullanın. RFC 9110, bölüm 8.2
Önizleme çalışmazsa belirtiye göre sonraki adımı seçin:
| Belirti | Sonraki adım |
|---|---|
| Başlangıçta adresin zaten kullanımda olduğu bildiriliyor | Programda 8000 değerini 8001 olarak değiştirin, programı yeniden çalıştırın ve tüm önizleme komutlarında 8001 kullanın. |
| İstek bağlantı hatası veriyor | İlk terminalin çalışan önizlemeyi hâlâ gösterdiğini ve bağlantı noktalarının eşleştiğini denetleyin. |
Yanıt 404 |
Tam olarak /paper-shapes yolunu kullanın; bu örnek sondaki eğik çizgiyi veya sorgu dizesini kabul etmez. |
| Tarayıcıda hâlâ önceki sürüm görünüyor | Programı Control-C ile durdurun, düzenlenmiş bloğu yeniden çalıştırın ve sayfayı yenileyin. |
| Başlık doğru görünüyor ama meta veriler eksik | GET çıktısını inceleyin ve bildirimlerin belge üstbilgisinde bulunduğunu doğrulayın. |
Google Arama bu yanıttan neleri kullanabilir?
Açıklayıcı bir başlık, doğru bir açıklama ve yararlı, görünür metin; Google’a bir sayfayı sunarken kullanabileceği belgelenmiş girdiler sağlar. Google, arama sonuçlarındaki başlık bağlantılarını otomatik olarak oluştururken kullandığı kaynaklar arasında title öğesini, ana görsel başlığı, başlık öğelerini ve diğer kaynakları sayar. Bu sinyalleri belgenin konusuyla tutarlı tutun. Arama sonuçlarında başlık bağlantılarınızı etkileme
Google, snippet’leri öncelikle sayfa içeriğinden oluşturur; bazen sayfayı daha doğru açıklıyorsa meta description değerini kullanır. Farklı aramalar farklı snippet’ler gösterebilir. Açıklamayı, arama sonucunda sabit bir başlık metni olarak değil, yararlı bir özet olarak değerlendirin. Arama sonuçlarındaki snippet’lerinizi kontrol etme
Örnek sayfada açıklama, kısa bir yerleştirme kılavuzu vaat eder ve gövde de bu kılavuzu sunar. Örnek metni değiştirirken bu ilişkiyi özellikle denetleyin: yalnızca açıklamayı okuyan biri sayfa hakkında doğru bir beklenti edinmelidir.
Özel meta veri adları eklemek, bunların desteklendiği anlamına gelmez. Google, desteklemediği meta etiketlerini yok saydığını belirtir. Arama için kullanılan meta verilerde belgelenmiş alanlarını kullanın; kendi uygulamanız için uydurduğunuz bir alanı ise ayrıca tanımlanmış bir tüketici kullanmalıdır. Google’ın desteklediği meta etiketleri ve özellikleri
Önizlemeyi herkese açık bir yayınlama kalıbına nasıl dönüştürürsünüz?
Bu kılavuzdaki yerel adres, masaüstü önizlemesidir; yayımlanmış bir sayfa değildir. Python belgelerinde ayrıca http.server öğesinin üretim ortamında kullanılmasının önerilmediği belirtilir. Bu örneği herkese açık barındırma hizmeti olarak kullanmak yerine HTML yapısını ve yanıt gereksinimlerini yayın sisteminize aktarın. Python HTTP sunucusu belgeleri
Bir içerik yönetim sistemi kullanıyorsanız sistemin belgelenmiş sayfa başlığı ve meta açıklama denetimlerini bulun. Google, bir içerik yönetim sisteminin doğrudan HTML düzenleme yerine arama ayarları sunabileceğini belirtir. Bu denetimleri burada gösterilen alanlarla eşleştirin ve ardından ortaya çıkan belge yanıtını inceleyin. Meta açıklama eklemeye ilişkin Google yönergeleri
HTTP, çok parçalı temsilleri destekler; ancak bu farklı bir paketleme tercihidir. Tarayıcıda okunabilir bu belge görevi için desteklenen HTML yapısı, içeriği ve belge meta verilerini zaten tek bir temsilde barındırır. Çok parçalı biçimi seçmek, bu kılavuzun gerektirmediği bir tüketici işleme gereksinimi doğurur. RFC 9110, bölüm 8.3.3
Tamamlandığını gösteren denetim somuttur: tek bir başarılı belge isteği doğru medya türünü, eksiksiz bir HTML gövdesini, doğru bir başlık ve açıklamayı ve okuyucuların aradığı metni döndürür. Yayın sisteminin çıktısının hazırladığınız belgeyle eşleşmesi için bu denetimi yerel önizlemenin yanı sıra ileride yayımlanacak yanıt üzerinde de uygulayın.
Kaynaklar
- RFC 9110: HTTP Semantiği — IETF / RFC Editor.
- RFC 9112: HTTP/1.1 — IETF / RFC Editor.
- HTML Standard: Belge meta verileri — WHATWG.
- macOS’ta Python kullanımı — Python Software Foundation.
- http.server — HTTP sunucuları — Python Software Foundation.
- curl — Nasıl Kullanılır — curl.
- Google Arama’da başlık bağlantılarını etkileme — Google Search Central.
- Meta açıklamaları nasıl yazılır — Google Search Central.
- Google’ın desteklediği meta etiketleri ve özellikleri — Google Search Central.