Python komut satırıyla HTTP sunucusu başlatma
Bir internet sitesine bağlandığında gördüğün sayfa, aslında bir sunucunun gönderdiği yanıtın tarayıcı tarafından yorumlanmasıyla oluşur. Tarayıcı, bir postacı gibi isteği sunucuya yollar; sunucu da karşılık olarak yanıt döner. Böylece sayfa ekranda görünür.
Bu veri alışverişini düzenleyen sistem, perde arkasında çalışan web sunucusudur. Geliştirici ya da sistem yöneticisi fark etmeksizin, web sunucularını anlamak modern yazılım dünyasında kritik bir yetenektir. Çünkü API’ler, siteler ve mini servisler bu temelin üzerine kurulur.
Bu yazıda, Python’un standart kütüphanelerini kullanarak ek bir modül yüklemeden çalışan bir HTTP sunucusu kuracağız.
Python’un temel bilgilerine veya kurulum sürecine henüz hâkim değilsen, başlangıç yazımıza göz atmanı tavsiye ederim.
HTTP Sunucusu Nedir?
HTTP, istemci ve sunucu arasında veri aktarımını sağlayan temel bir internet protokolüdür. HTTP sunucusu, belirlenen bir portu dinler, gelen istekleri işler ve uygun cevapları istemcilere yollar.
Bir kullanıcı https://ornek-site.com adresini ziyaret ettiğinde, tarayıcı DNS üzerinden alan adını bir IP adresine dönüştürür. Elde edilen IP adresine genellikle 80 (HTTP) veya 443 (HTTPS) portları üzerinden istek gider. Sunucu bu isteği işleyip yanıt üretir, tarayıcı da bu yanıtı kullanıcıya görsel biçimde sunar.
TCP ve Port Nedir?
Bir HTTP isteği, hedefe ulaşabilmek için hem bir IP adresi hem de bir port numarası gerektirir. Bu birleşim TCP soketi olarak adlandırılır.
Örneğin yerel sunucunuzun IP’si 192.168.1.10, portu 8080 olabilir.
Tarayıcıya http://192.168.1.10:8080 yazarak bu sunucuya bağlantı kurabilirsiniz.

Statik Bir Web Sayfası Oluşturma
Sunucunun test ederken göstereceği örnek bir HTML sayfası hazırlayalım. Herhangi bir metin düzenleyici açın ve aşağıdaki kodu girin. Sonrasında bu dosyayı index.html olarak kaydedin. Sunucu, bu dosyayı istemci taleplerine yanıt olarak 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 tabanlı bu temel yapı, yalnızca test amaçlı kullanılabilecek bir ortam sağlar. Ancak gerçek sunucularda güvenli bağlantı kurmak istiyorsan, ayrıntılı yönlendirme adımlarını paylaştığımız HTTP’den HTTPS’ye Yönlendirme yazımızı incelemeni öneririz.
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)
