Web Programlama
Web programlamayı DNS, URL, HTTP/1.1-2-3, TLS, HTML, CSS, JavaScript/ECMAScript 2026, DOM, Fetch/CORS, erişilebilirlik, güvenlik, gerçek zamanlı iletişim, WebAssembly, performans ve dağıtım ekseninde güncel standartlarla ele alan kapsamlı ders notu.
Web programlama, yalnız HTML etiketi veya belirli bir sunucu çatısı öğrenmek değildir. Tarayıcı, DNS, URL, HTTP, TLS, HTML, CSS, JavaScript, erişilebilirlik, güvenlik, önbellekleme, istemci durumu ve sunucu tarafı uygulama modelinin birlikte nasıl davrandığını anlamayı gerektirir. Bu ders, tarihsel teknolojileri bugünkü yerleriyle ilişkilendirirken güncel Web platformunu standartlar üzerinden ele alır.
Web sürekli gelişen bir platformdur. HTML ve Fetch, yaşayan standartlar olarak güncellenir; JavaScript dili ECMAScript standardıyla sürümlenir; HTTP semantiği taşıma sürümünden ayrıdır. Bu nedenle dersin amacı tek bir editöre, tarayıcıya veya framework sürümüne bağımlı bilgi vermek değil, kalıcı protokol ve platform ilkelerini öğretmektir.
1. İnternet ile Web aynı şey değildir
İnternet, IP tabanlı ağların birbirine bağlanmasını sağlayan küresel altyapıdır. Web ise bu altyapı üzerinde URL, HTTP, HTML ve tarayıcı API'leriyle çalışan uygulama katmanı ekosistemidir. E-posta, SSH, DNS ve başka protokoller İnternet'i kullanabilir fakat Web'in parçası olmak zorunda değildir.
Bu ayrım mimaride önemlidir. Bir web uygulamasının kullanıcı arayüzü HTTP üzerinden çalışırken arka plandaki servisler mesaj kuyruğu, veritabanı protokolü veya başka taşıma mekanizmaları kullanabilir.
2. İstemci-sunucu modelinden dağıtık web uygulamasına
En basit modelde tarayıcı istemci, uygulama ise sunucudur. Gerçek sistemde istek yolu daha uzundur:
browser
-> recursive DNS resolver
-> CDN / edge
-> load balancer / reverse proxy
-> web application
-> cache / database / message broker / downstream serviceHer katman gecikme, hata, güvenlik ve önbellek davranışını değiştirir. Kullanıcının gördüğü tek bir sayfa çok sayıda origin'e ve hizmete istek gönderebilir.
3. DNS: ad çözümleme ve yetki zinciri
DNS alan adını yalnız bir IP adresine çeviren tablo değildir. Hiyerarşik ve dağıtık bir adlandırma sistemidir. A ve AAAA kayıtları adres, CNAME takma ad, MX posta, TXT çeşitli doğrulama/politika verileri için kullanılabilir.
DNS yanıtları TTL ile önbelleğe alınabilir. Bu nedenle kayıt değişikliği her istemcide anında görünmeyebilir. DNSSEC, DNS verisinin özgünlük ve bütünlüğünü doğrulamaya yönelik imzalı bir zincir sağlar; TLS'in veya uygulama kimlik doğrulamasının yerine geçmez.
4. URL, URI, origin ve site kavramları
Bir HTTP URL'si tipik olarak şema, host, isteğe bağlı port, path, query ve fragment bileşenlerinden oluşur:
https://api.example.org:8443/v1/items?id=42#detailsorigin, şema + host + port üçlüsüdür. Tarayıcı güvenlik modeli açısından https://a.example ile https://b.example farklı origin'lerdir. site kavramı ise cookie ve bazı güvenlik politikalarında registrable domain bağlamıyla kullanılır. Bu iki kavram aynı değildir.
Fragment (#...) normal HTTP isteğinde sunucuya gönderilmez; tarayıcı tarafı gezinme veya istemci durumu için kullanılır.
5. HTTP semantiği taşıma sürümünden ayrıdır
HTTP kaynaklara ilişkin istek-cevap semantiğini tanımlar. HTTP/1.1, HTTP/2 ve HTTP/3 aynı temel metot ve durum kodu semantiğini paylaşır; taşıma ve mesajlama biçimleri farklıdır. HTTP/2 bir bağlantı üzerinde çoklu akış ve başlık sıkıştırma getirir. HTTP/3 ise QUIC üzerinde çalışır ve TCP yerine UDP tabanlı güvenli çoklama kullanır.
Bir uygulamanın GET, POST, PUT, PATCH veya DELETE seçimi yalnız CRUD etiketi değildir. Güvenli ve idempotent metot semantiği retry, önbellek ve proxy davranışını etkiler.
6. İstek ve cevap anatomisi
Bir HTTP mesajında başlangıç bilgisi, başlıklar ve isteğe bağlı gövde bulunur. Örnek bir istek:
GET /api/devices/42 HTTP/1.1
Host: example.org
Accept: application/json
If-None-Match: "v17"Örnek cevap:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: private, max-age=60
ETag: "v17"
{"id":42,"state":"active"}Başlıklar protokol üst veri'sıdır. Uygulama verisini gelişigüzel özel başlıklara taşımak yerine HTTP semantiğine ve içerik modeline uygun tasarım yapılmalıdır.
7. Durum kodlarını iş mantığıyla karıştırmamak
Durum kodu, HTTP seviyesindeki sonucu sınıflandırır. Genel aileler:
2xx: istek işlendi,3xx: yönlendirme veya koşullu/önbellek sonucu,4xx: istemci bağlamında düzeltilebilir istek/erişim sorunu,5xx: sunucu isteği yerine getiremedi.
200 OK içinde {"success":false} döndürmek protokol bilgisini uygulama gövdesine saklar. Buna karşılık her iş kuralı ihlalini 500 yapmak da yanlıştır. API sözleşmesi HTTP durumu ile domain hata gövdesini birlikte tanımlamalıdır.
8. HTTPS ve TLS
HTTPS, HTTP'nin TLS ile korunmuş taşıma üzerinden kullanılmasını ifade eder. TLS üç temel hedef sağlar: uç nokta kimliğinin sertifika zinciriyle doğrulanması, aktarım gizliliği ve bütünlük.
TLS uygulama seviyesindeki yetkilendirme değildir. Geçerli sertifikaya sahip sunucu yine yanlış kullanıcıya veri verebilir. Benzer biçimde HTTPS, XSS veya SQL injection gibi uygulama açıklarını çözmez.
Üretimde HTTP'den HTTPS'ye yönlendirme, HSTS, modern TLS yapılandırması ve sertifika yaşam döngüsü birlikte yönetilmelidir.
9. HTML: içerik ve anlam katmanı
HTML, programlama dili değil; belgenin semantik yapısını ve web uygulaması yüzeyini tanımlayan işaretleme dilidir. Güncel HTML yaşayan bir standarttır; eski "HTML5 sürümü" ezberinden çok, güncel uyumluluk ve semantik elemanlar önemlidir.
<main>
<article>
<header>
<h1>Sistem Durumu</h1>
</header>
<p>Son güncelleme <time datetime="2026-09-16T09:30:00+03:00">09:30</time>.</p>
</article>
</main>div her şeyi kapsayabilir; ancak main, nav, article, section, button, label gibi doğru elemanlar erişilebilirlik, tarayıcı davranışı ve bakım açısından daha güçlü sözleşme sağlar.
10. HTML ayrıştırıcı gerçek dünyadaki hataları nasıl ele alır?
text/html içeriği XML gibi katı bir ayrıştırıcı ile işlenmez. HTML standardı hata toleranslı ayrıntılı parsing algoritması tanımlar. Bu nedenle bozuk etiket dizisi tarayıcıda "çalışıyor" görünebilir; fakat üretilen DOM geliştiricinin metne bakarak tahmin ettiği ağaç olmayabilir.
Doğru yöntem, geçerli ve semantik HTML üretmek, validator ve tarayıcı geliştirme araçlarıyla gerçek DOM'u kontrol etmektir.
11. Formlar, native kontroller ve doğrulama
HTML form kontrolleri erişilebilir klavye davranışı, form serialization ve yerleşik doğrulama mekanizmaları sağlar.
<form id="device-form">
<label for="serial">Seri numarası</label>
<input id="serial" name="serial" required minlength="6" autocomplete="off">
<button type="submit">Kaydet</button>
</form>İstemci doğrulaması kullanıcı deneyimidir; güvenlik sınırı değildir. Sunucu gelen her alanı yeniden doğrulamalıdır. disabled alanların gönderilmemesi, checkbox/radio serialization kuralları ve çok parçalı dosya yükleme gibi ayrıntılar API sözleşmesini etkiler.
12. CSS: cascade, layout ve responsive tasarım
CSS yalnız renk/font vermek değildir. Cascade, specificity, inheritance, box model ve formatting context davranışlarını tanımlar. Güncel layout için Flexbox ve Grid ana araçlardır; responsive davranış media query ve uygun olduğunda container query ile modellenebilir.
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(18rem, 1fr));
gap: 1rem;
}
.card {
container-type: inline-size;
}Inline stil veya !important yığınları kısa vadeli düzeltme sağlayıp uzun vadede cascade yönetimini bozar. Tasarım token'ları, katmanlar ve sınırlı selector karmaşıklığı daha öngörülebilir sonuç verir.
13. Responsive tasarım çözünürlük listesi değildir
Responsive tasarım, sabit birkaç ekran genişliği için ayrı sayfa üretmek yerine içeriğin kullanılabilirliğini farklı viewport, zoom, yazı boyutu ve giriş yöntemlerinde korumaktır.
Sadece piksel breakpoint'lerine göre tasarım yapmak yeterli değildir. Uzun çeviriler, sistem font ölçeği, klavye odağı, dokunma hedefleri, prefers-reduced-motion, yüksek kontrast ve yatay/dikey kullanım test edilmelidir.
14. Web erişilebilirliği
Erişilebilirlik sonradan ARIA eklemek değildir. Doğru HTML elemanı ilk tercihtir. Bir button, klavye, odak ve rol davranışını hazır sağlar; div onclick aynı sözleşmeyi sağlamaz.
Temel kontroller:
- anlamlı başlık hiyerarşisi,
- form alanı için programatik label,
- klavye ile tüm işlemler,
- görünür focus,
- yalnız renkle bilgi vermeme,
- görsellerde amaca uygun alternatif metin,
- yeterli kontrast,
- dinamik durumların gerektiğinde erişilebilir biçimde bildirilmesi.
WCAG 2.2 güncel W3C Recommendation'dır; erişilebilirlik testleri yalnız otomatik tarayıcıya bırakılmamalıdır.
15. JavaScript ve ECMAScript
JavaScript'in standart dili ECMAScript'tir. ECMAScript 2026, ECMA-262'nin 17. baskısıdır. Modern kodda let/const, modules, promises, async/await, iterators, classes ve typed arrays gibi dil/platform özellikleri doğrudan kullanılabilir; jQuery'nin tarihsel olarak çözdüğü birçok DOM ve ağ işlemi artık platform API'lerinde bulunur.
const state = Object.freeze({ retries: 3 });
export function normalize(value, min, max) {
if (max <= min) throw new RangeError("invalid range");
return (value - min) / (max - min);
}JavaScript'in dinamik tür yapısı, bilinmeyen dış verinin doğrulanması gereğini ortadan kaldırmaz.
16. DOM ve olay modeli
Tarayıcı HTML'i DOM ağacına dönüştürür. JavaScript bu ağacı standart API'lerle okuyup değiştirebilir.
const button = document.querySelector("#refresh");
const output = document.querySelector("#status");
button.addEventListener("click", async () => {
output.textContent = "Yükleniyor";
const response = await fetch("/api/status");
output.textContent = response.ok ? "Hazır" : `Hata ${response.status}`;
});Inline onclick yerine addEventListener kullanmak içerik ile davranışı ayırır ve CSP ile daha uyumlu bir yapı sağlar.
Olaylar capture, target ve bubble aşamalarından geçebilir. Delegation, çok sayıda benzer elemanda tek üst dinleyiciyle daha düşük kayıt maliyeti sağlayabilir.
17. Modüller ve yükleme zamanı
Modern tarayıcı modülleri type="module" ile yükler. Module script'ler varsayılan olarak defer benzeri davranır, kendi scope'una sahiptir ve import/export kullanır.
<script type="module" src="/assets/app.js"></script>Bundle aracı kullanmak zorunlu değildir. Bundling, minification, tree-shaking ve code-splitting ancak uygulamanın hedef tarayıcıları, önbellek stratejisi ve teslimat maliyetiyle birlikte seçilmelidir.
18. Asenkron model, event loop ve microtask
Tarayıcı JavaScript'i event loop üzerinden çalıştırır. Promise continuation'ları microtask kuyruğuna girer; timer ve kullanıcı olayları farklı task kaynaklarından gelebilir. Uzun CPU işi ana iş parçacığı'i bloke ederek input ve rendering gecikmesine yol açar.
CPU yoğun işlem için parçalama, Web Worker veya uygun olduğunda WebAssembly değerlendirilebilir. async/await, işi otomatik olarak başka iş parçacığı'e taşımaz; promise tabanlı kontrol akışını daha okunabilir hale getirir.
19. Fetch API ve HTTP istemcisi
Fetch Standard istek, cevap, redirect, CORS, credentials ve service worker etkileşimini ortak model altında tanımlar.
async function loadDevice(id, signal) {
const response = await fetch(`/api/devices/${encodeURIComponent(id)}`, {
headers: { Accept: "application/json" },
signal
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
return response.json();
}fetch yalnız ağ hatasında reject olabilir; 404 veya 500 otomatik exception değildir. response.ok veya durum kodu ayrıca kontrol edilmelidir.
20. Same-origin policy ve CORS
Same-origin policy tarayıcıdaki bir origin'in başka origin kaynaklarına erişimini sınırlar. CORS, sunucunun belirli cross-origin okumalara izin vermesini sağlayan HTTP tabanlı opt-in protokolüdür.
CORS bir kimlik doğrulama veya sunucu tarafı erişim kontrolü değildir. Bir saldırgan sunucuya doğrudan HTTP isteği gönderebilir; CORS esas olarak tarayıcıdaki istemci kodunun yanıtı okuyup okuyamayacağını kontrol eder.
Credential kullanılan CORS yapılandırmasında wildcard ve origin yansıtma hataları özellikle dikkatle ele alınmalıdır.
21. Cookie, session ve tarayıcı depolaması
Cookie HTTP istekleriyle otomatik gönderilebilir. Secure, HttpOnly ve SameSite güvenlik özellikleri kullanım amacına göre belirlenmelidir.
Set-Cookie: session=opaque-value; Path=/; Secure; HttpOnly; SameSite=LaxlocalStorage ve sessionStorage JavaScript tarafından okunur; hassas oturum token'larını XSS'e açık depolamaya koymak riski büyütebilir. Büyük/yapısal istemci verisi için IndexedDB daha uygundur.
Sunucu session'ı cookie ile aynı şey değildir: cookie çoğu zaman yalnız session kimliğini taşır; asıl durum sunucuda tutulabilir.
22. Kimlik doğrulama ve yetkilendirme
Authentication "kim?", authorization "ne yapabilir?" sorusudur. Oturum cookie'si, bearer token, OAuth/OIDC veya passkey gibi mekanizmalar farklı güven sınırları oluşturur.
Her endpoint sunucu tarafında authorization yapmalıdır. UI'da butonu gizlemek erişim kontrolü değildir.
Yetki nesne seviyesinde de değerlendirilmelidir. Kullanıcı /api/orders/42 kaynağını tahmin edebiliyorsa yalnız oturum açmış olması o kaydı görmeye yetmemelidir.
23. CSRF, XSS ve injection
CSRF, tarayıcının otomatik credential gönderme davranışını kötüye kullanabilir. SameSite cookie politikası riski azaltabilir fakat mimariye göre CSRF token/Origin kontrolü gibi ek mekanizmalar gerekebilir.
XSS, güvenilmeyen verinin çalıştırılabilir HTML/JavaScript bağlamına girmesidir. Savunma bağlama uygun output encoding, güvenli DOM API'leri, template auto-escaping ve CSP katmanlarının birlikte kullanımıdır.
SQL/command/template injection ise veriyi komut veya kodla birleştirme problemidir. Parametreli sorgular ve güvenli API'ler temel kontroldür.
24. Content Security Policy
CSP, sayfanın hangi kaynakları yükleyip çalıştırabileceğini sınırlayarak XSS etkisini azaltan ek bir savunma katmanıdır.
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self'CSP, output encoding veya güvenli kodun yerine geçmez. Inline script bağımlılığı ve geniş wildcard politikaları korumayı zayıflatır. Raporlama modları üretime geçişte politika ihlallerini gözlemlemek için kullanılabilir.
25. OWASP Top 10:2025'i tasarım kontrolü olarak kullanmak
OWASP Top 10:2025; broken access control, security misconfiguration, software supply chain failures, cryptographic failures, injection, insecure design, authentication failures, software/data integrity failures, logging-alerting failures ve exceptional condition handling başlıklarını öne çıkarır.
Bu liste otomatik güvenlik standardı değildir; threat model, abuse case, dependency provenance, secret management, input/output sınırları ve güvenli hata davranışıyla birlikte kullanılmalıdır.
26. REST, kaynak modeli ve JSON
REST bir JSON formatı değildir. Kaynakları URI'larla tanımlamak, standart HTTP semantiğinden yararlanmak ve önbellek/stateless etkileşimleri doğru modellemek ana fikirdir.
POST /api/devices
Content-Type: application/json
{"serial":"A-1042","enabled":true}JSON veri değişiminde yaygındır ancak tarih, para, büyük integer, binary veri ve polymorphic payload sözleşmeleri açıkça tanımlanmalıdır. API versioning yalnız URL'e /v1 eklemekten ibaret değildir; backward compatibility politika gerektirir.
27. XML bugün nerede duruyor?
XML; belge, entegrasyon, imzalı veri, bazı kurumsal protokoller ve yapılandırmalarda hâlâ kullanılır. HTML'in alternatifi değildir. XML namespace, schema, streaming ayrıştırıcı ve canonicalization gibi özellikleri nedeniyle belirli alanlarda güçlüdür.
Tarayıcı içeriği için text/html ana sözdizimidir. WHATWG, HTML'in XML sözdizimini yeni özelliklerin eklenmesinin beklenmemesi ve bakım sorunları nedeniyle yeni içerik için önermemektedir.
28. WebSocket, Server-Sent Events ve gerçek zamanlı iletişim
Polling her durumda doğru çözüm değildir. Tek yönlü sunucudan istemciye olay akışı için Server-Sent Events, çift yönlü uzun ömürlü bağlantı için WebSocket kullanılabilir.
Gerçek zamanlı kanal seçerken şu maliyetler düşünülmelidir:
- bağlantı sayısı,
- proxy/load-balancer timeout'ları,
- yeniden bağlanma,
- geri basınç,
- mesaj sırası ve tekrarları,
- authentication yenileme,
- yatay ölçeklemede fan-out.
"WebSocket daha hızlıdır" tek başına mimari gerekçe değildir.
29. Service Worker ve Progressive Web App modeli
Service Worker ağ ile sayfa arasında çalışan event-driven bir tarayıcı bileşenidir. Offline önbellek, background davranışları ve özel fetch stratejileri sağlayabilir.
Cache-first stratejisi statik içerikte iyi çalışırken kullanıcıya özgü veya hızla değişen veride eski/yanlış içerik gösterebilir. Service worker önbellek'i HTTP önbellek'den ayrı bir katmandır; invalidation politikası açık olmalıdır.
30. WebAssembly'nin yeri
WebAssembly 3.0; güvenli, taşınabilir ve düşük seviyeli bir kod formatıdır. Tarayıcıda yüksek hesaplama yoğunluklu modüller, codec, simülasyon veya başka dillerdeki kütüphaneler için kullanılabilir; JavaScript'in veya DOM'un genel amaçlı yerine geçen bir dil değildir.
Wasm modülü web API'lerine doğrudan sınırsız erişmez; host tarafından verilen import'larla etkileşir. Bu sandbox sınırı güvenlik modelinin parçasıdır.
31. Önbellekleme ve koşullu istekler
Web performansının en düşük maliyetli optimizasyonlarından biri gereksiz veri transferini önlemektir. Cache-Control, ETag, Last-Modified, If-None-Match ve Vary doğru kullanıldığında tarayıcı ve ara önbellek'ler tekrar kullanabilir.
Hash içeren immutable statik dosyada uzun önbellek süresi mantıklıdır:
Cache-Control: public, max-age=31536000, immutableAynı yaklaşımı kullanıcıya özgü HTML veya authorization'a bağlı API cevabına körlemesine uygulamak veri sızıntısı oluşturabilir.
32. Performans: ağ, ana iş parçacığı ve rendering birlikte ölçülür
Web gecikmesi yalnız backend süresi değildir. DNS, TCP/QUIC/TLS kurulumu, server think time, payload büyüklüğü, parsing, JavaScript yürütme, style/layout ve paint kullanıcı algısını etkiler.
İyi optimizasyon sırası genellikle ölçümle başlar:
- gereksiz ağ çağrısını kaldır,
- payload ve image boyutunu azalt,
- önbellek'i düzelt,
- blocking script/style yolunu azalt,
- uzun main-iş parçacığı task'larını parçala,
- DOM boyutunu ve layout thrashing'i kontrol et.
Mikro-optimizasyon, ölçülmemiş network waterfall veya büyük görsel maliyetini telafi etmez.
33. Görsel varlıklar ve medya
Modern web'de görsel format seçimi içeriğe bağlıdır. Responsive image için srcset ve sizes, lazy loading için loading="lazy" uygun yerlerde kullanılabilir.
<img
src="/img/device-800.webp"
srcset="/img/device-400.webp 400w, /img/device-800.webp 800w"
sizes="(max-width: 600px) 100vw, 800px"
width="800"
height="450"
alt="Cihaz telemetri paneli">width/height oranının verilmesi layout shift'i azaltır. Kritik üst bölüm görselini indiscriminately lazy-load etmek ise ters etki yapabilir.
34. Sunucu tarafı programlama: framework'ten bağımsız model
Sunucu tarafında dil değişse de ana sorumluluklar benzerdir:
request parsing
-> authentication/authorization
-> validation
-> domain logic
-> transaction / external calls
-> response mappingJava/Spring Boot, C#/.NET, Go, Python, PHP, JavaScript/Node.js ve başka platformlar bu akışı farklı API'lerle uygular.
Framework'ün request/session nesnelerini domain katmanına taşımak uzun vadeli bağımlılığı artırır. HTTP katmanı ile iş kuralı ayrılmalıdır.
35. Tarihsel CGI, klasik ASP ve Web Forms ne öğretiyor?
CGI, klasik ASP, VBScript ve ASP.NET Web Forms güncel genel web geliştirme varsayılanı değildir; ancak web'in evrimini anlamak açısından önemlidir.
CGI her istek için süreç/program çağırma modelinin maliyetlerini görünür hale getirdi. Klasik ASP sunucu tarafı script yaklaşımını yaygınlaştırdı. Web Forms, masaüstü olay modelini ViewState, server controls ve postback ile web'in stateless HTTP yapısı üzerinde emüle etmeye çalıştı.
Bugünkü server-rendered framework'ler ve API tabanlı uygulamalar HTTP semantiğini daha doğrudan görünür kılar. Eski Request, Response, Session, form GET/POST ve XML konuları ise kavramsal olarak yaşamaya devam eder.
36. jQuery, VBScript, Flash ve eski editörler
jQuery'nin selector, DOM normalization, AJAX ve event API'leri tarayıcılar arası farkların büyük olduğu dönemde önemliydi. Modern DOM, querySelector, fetch, classList ve standart event API'leri birçok temel kullanımda harici bağımlılık gereksinimini azalttı. jQuery mevcut sistemlerde hâlâ kullanılabilir; yeni projede gereksinim bazlı değerlendirilmelidir.
Tarayıcı VBScript'i modern platform standardı değildir. Flash plugin modeli de modern web platformundan çıkarılmıştır. Bu teknolojiler yalnız tarihsel migration bağlamında anlatılmalıdır.
FrontPage, HomeSite, Visual InterDev gibi editör adları kalıcı web bilgisi değildir. Güncel ders açısından önemli olan editor değil; standards-compliant çıktı, version control, build pipeline, test ve dağıtım sürecidir.
37. E-posta, FTP ve Telnet'in web bağlamındaki yeri
SMTP, IMAP ve POP e-posta protokolleridir; web protokolleri değildir. Web uygulaması e-posta gönderdiğinde çoğu zaman bir SMTP servisine veya HTTP tabanlı mail API'sine bağlanır.
FTP dosya aktarımı için tarihsel olarak yaygındır; credential ve transport gereksinimine göre SFTP/SSH veya HTTPS tabanlı dağıtım mekanizmaları tercih edilir. Telnet şifrelenmemiş uzak terminal/protokol test aracı olarak güvenli yönetim kanalı değildir; SSH onun genel güvenli operasyonel karşılığıdır.
Bu protokollerin adlarını bilmek yerine güvenlik ve taşıma özelliklerini anlamak daha kalıcı bilgidir.
38. Deployment: hosting'den delivery pipeline'a
Bir web uygulamasını yayımlamak yalnız dosyayı FTP ile sunucuya kopyalamak değildir. Modern dağıtım şu bileşenleri içerebilir:
- artifact/image üretimi,
- immutable sürüm etiketi,
- configuration/secret ayrımı,
- migration sırası,
- health/readiness kontrolü,
- reverse proxy ve TLS,
- DNS/CDN ayarı,
- canary/blue-green veya kontrollü rollout,
- rollback planı.
Statik site, monolith ve dağıtık servis aynı dağıtım stratejisine zorlanmamalıdır.
39. SEO, üst veri ve makine tarafından keşfedilebilirlik
title, meta description, canonical, robots yönergeleri, yapılandırılmış veri ve sitemap; arama motorlarının sayfayı keşfetmesi ve yorumlamasında farklı rollere sahiptir.
meta keywords gibi tarihsel yaklaşımlar modern SEO'nun merkezi değildir. robots yönergesi erişim kontrolü değildir; gizli içeriği arama motorundan saklamaya çalışmak authentication yerine geçmez.
Semantik HTML, gerçek içerik kalitesi, kararlı URL ve doğru HTTP durum kodları teknik SEO'nun temelidir.
40. Test stratejisi
Web testleri katmanlara ayrılmalıdır:
- saf iş mantığı için unit test,
- HTTP sözleşmesi için integration/contract test,
- veri katmanı için gerçekçi integration test,
- browser davranışı için end-to-end test,
- erişilebilirlik için otomatik + manuel kontrol,
- güvenlik için SAST/DAST/dependency ve hedefli testler,
- performans için üretime benzer yük ve tarayıcı profili.
E2E testini her ayrıntı için kullanmak yavaş ve kırılgan suite üretir. En düşük maliyetli katmanda deterministik doğrulama tercih edilmelidir.
41. Üretim güvenilirliği
Tarayıcı ve ağ güvenilmez bileşenlerdir. İstek iptal olabilir, kullanıcı iki kez tıklayabilir, reverse proxy timeout verebilir, cevap gecikmişken retry yapılabilir.
Bu nedenle kritik endpoint'lerde idempotency, timeout, cancellation, bounded retry ve duplicate işleme politikası düşünülmelidir. UI da optimistic update yapıyorsa rollback ve reconciliation davranışı tanımlanmalıdır.
42. İlgili dersler
Web'in sunucu tarafındaki Java uygulaması için Spring Boot, C#/.NET uygulamaları için C# Programlama, dil semantiği için Programlama Dilleri, ağ katmanları için Bilgisayar Ağları, veri kalıcılığı için Veri Tabanı Yönetim Sistemleri ve hukuki sınırlar için Bilişim Hukuku birlikte okunabilir.
Kaynaklar
- WHATWG, HTML Living Standard. https://html.spec.whatwg.org/
- WHATWG, Fetch Living Standard. https://fetch.spec.whatwg.org/
- IETF, RFC 9110 — HTTP Semantics. https://www.rfc-editor.org/rfc/rfc9110
- IETF, RFC 9113 — HTTP/2. https://www.rfc-editor.org/rfc/rfc9113
- IETF, RFC 9114 — HTTP/3. https://www.rfc-editor.org/rfc/rfc9114
- Ecma International, ECMA-262 — ECMAScript 2026 Language Specification. https://ecma-international.org/publications-and-standards/standards/ecma-262/
- W3C, Web Content Accessibility Guidelines (WCAG) 2.2. https://www.w3.org/TR/WCAG22/
- W3C, Content Security Policy Level 3. https://www.w3.org/TR/CSP3/
- OWASP, OWASP Top 10:2025. https://top10.owasp.org/2025/
- W3C WebAssembly Working Group, WebAssembly Core Specification 3.0. https://www.w3.org/TR/wasm-core/
- MDN Web Docs, Web platform documentation. https://developer.mozilla.org/