Bir internet sitesine girdiğinizde, ekranda gördüğünüz sayfa aslında bir sunucudan gelen yanıtın tarayıcı tarafından yorumlanmış hâlidir. Tarayıcı, tıpkı bir postacı gibi bir istek gönderir. Sunucu da bu isteğe karşılık bir cevap yollar. Böylece bizde sayfanın içeriğini görmüş oluruz.
Bu trafiği yöneten şey, arka planda çalışan bir web sunucusudur. İster bir uygulama geliştiricisi olun ister bir sistem yöneticisi, web sunucularını anlamak modern yazılım dünyasının temel taşlarından biridir. Çünkü API’ler, web siteleri, hatta küçük test servisleri bile bu altyapının üzerine kuruludur.
Bu yazıda, Python’un kendi standardını kullanarak ekstra hiçbir paket yüklemeden çalışan bir HTTP sunucusu geliştireceğiz.
Python’un temellerine ve kurulum adımlarına hâkim değilsen, baştan başlamak için yazımıza göz atabilirsin.
HTTP Sunucusu Nedir?
HTTP, istemci ile sunucu arasındaki veri iletişimini sağlayan en temel ağ protokolüdür.
Bir HTTP sunucusu, belirli bir port üzerinden gelen istekleri dinler ve uygun yanıtı üretip istemciye gönderir.
Örneğin bir kullanıcı tarayıcıya https://ornek-site.com yazdığında
- Tarayıcı, bu alan adını DNS sistemi üzerinden bir IP adresine dönüştürür.
- Elde edilen IP adresine, varsayılan olarak 80 (HTTP) veya 443 (HTTPS) portundan bir istek gönderilir.
- Sunucu, gelen isteği yakalar, ilgili içeriği hazırlar ve geri yollar.
- Tarayıcı bu yanıtı işler ve kullanıcıya sayfayı gösterir.
TCP ve Port Nedir?
Bir HTTP isteği, ağ üzerinde belirli bir hedefe ulaşmak zorundadır. Bu hedef, bir IP adresi ve port numarası ile tanımlanır. İkisi bir araya geldiğinde TCP soket adresi oluşur.
Örneğin yerel ağınızda çalışan bir sunucunun IP’si 192.168.1.10, portu ise 8080 olabilir.
Tarayıcınıza http://192.168.1.10:8080 yazdığınızda, tarayıcı isteği tam olarak bu adrese gönderir.

Statik Bir Web Sayfası Oluşturma
Sunucumuzun test amacıyla göstereceği basit bir HTML sayfası oluşturalım. Herhangi bir metin düzenleyici açın ve aşağıdaki içeriği yazalım. Daha sonra bu dosyayı index.html adıyla kaydedelim. Sunucumuz, bu dosyayı istemcilere gönderecek.
<html>
<head>
<title>Python HTTP Sunucusu</title>
</head>
<body>
<h1>Merhaba, dünya!</h1>
<p>Python ile oluşturulmuş basit bir web sunucusu çalışıyor.</p>
</body>
</html>
Python ile HTTP Sunucusu Oluşturma
Python, http.server ve socketserver modülleriyle basit bir HTTP sunucusu oluşturmayı son derece kolaylaştırır. Yeni bir dosya oluşturalım ve adını server.py koyalım.
import http.server
import socketserver
PORT = 8080
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print(f"Sunucu {PORT} numaralı portta çalışıyor...")
httpd.serve_forever()
Kaydedip çalıştıralım
python server.py
Şimdi tarayıcımızı açıp http://localhost:8080 adresine gidelim index.html dosyamızın içeriği karşımıza gelecektir.
Localhost Nedir?
localhost, kendi bilgisayarınızı temsil eden özel bir alan adıdır.
Genellikle 127.0.0.1 (IPv4) veya ::1 (IPv6) adresine karşılık gelir.
Bu adres, sistemin kendi içinde ağ trafiği oluşturmasına olanak tanır.
Yani tarayıcınızda http://127.0.0.1:8080 veya http://localhost:8080 yazmanız aynı anlama gelir.
Sunucunuzu durdurmak isterseniz, terminalde Ctrl + C tuşlarına basmanız yeterlidir.

Python HTTP Sunucusunda Klasör Paylaşımı
Python’un http.server modülü sadece HTML sayfalarını değil, aynı dizinde bulunan tüm dosyaları da sunabilir.
Mesela sunucu dizininde .txt, .jpg veya .zip gibi dosyalar varsa, tarayıcıda bunların listelendiğini görebilirsiniz.
Bu özellik, küçük ağlarda dosya paylaşmak veya geçici bir indirme bağlantısı oluşturmak için oldukça pratiktir.
python -m http.server 8000
Ardından tarayıcıda http://localhost:8000 adresine gittiğinizde klasör içeriği listelenir.
Dilerseniz özel bir dizin de belirtebilirsiniz.
python -m http.server 8000 --directory C:\paylasim
HTTP üzerinden çalışan bu basit yapı temel bir test ortamı sağlar. Gerçek sunucularda güvenli bağlantı kurmak istiyorsan, yönlendirme adımlarını anlattığımız HTTP’den HTTPS’ye Yönlendirme yazımızı inceleyebilirsiniz
Sık Sorulan Sorular
Port 8080 neden tercih edilir?
80 numaralı port genellikle sistem tarafından ana web servisine ayrılmıştır.
8080 portu ise HTTP trafiği için alternatif bir standarttır ve çoğu test veya geliştirme ortamında çakışma olmadan kullanılabilir.
http.server ile HTTPS (SSL) desteği nasıl eklenir?
Python’un ssl modülünü kullanarak HTTPS protokolünü etkinleştirebilirsiniz.
Bunun için bir sertifika (.pem) dosyası oluşturup ssl.wrap_socket() metoduyla bağlantıyı şifrelemeniz gerekir.
Localhost ve 127.0.0.1 arasında fark var mı?
Hayır, her ikisi de aynı hedefi gösterir: kendi bilgisayarınızı.localhost bir alan adıdır, 127.0.0.1 ise bu alan adının IP karşılığıdır. Her iki adres de yalnızca sistemin kendisine yönlendirme yapar.
SimpleHTTPRequestHandler ne işe yarar?
SimpleHTTPRequestHandler, Python’un temel dosya sunucu sınıfıdır. Gelen HTTP isteklerini algılar, mevcut dizindeki dosyaları tarayıcıya gönderir ve log kaydı tutar.
Sunucuyu arka planda nasıl çalıştırabilirim?
Linux’ta şu şekilde arka planda çalıştırabilirsiniz
nohup python -m http.server 8080 &
Windows ortamında ise PowerShell üzerinden Start-Job komutu kullanılabilir.
Bu sayede terminal kapatılsa bile sunucu çalışmaya devam eder.
Kısa ve anlaşılır anlatımıyla hazırlanmış videoya da göz atabilirsiniz.
🎥 Python ile Basit HTTP Sunucusu Oluşturma (YouTube)
