Python ile HTTP web sunucusu nasıl kurulur?
Bir web sitesine eriştiğinde ekranda gördüğün sayfa, aslında bir sunucudan alınan yanıtın tarayıcı tarafından yorumlanmış hâlidir. Tarayıcı, bir postacı gibi isteği sunucuya iletir. Sunucu da bu isteğe karşılık bir yanıt gönderir. Böylece ekranda içeriği görüntüleriz.
Bu iletişimi yöneten sistem, arka planda çalışan web sunucusudur. Uygulama geliştiricisi ya da sistem yöneticisi ol fark etmez; web sunucularını kavramak modern yazılım dünyasında temel bir gerekliliktir. Çünkü API’ler, web siteleri ve küçük test hizmetleri dahi bu altyapı üzerinde çalışır.
Bu rehberde, Python’un standart kütüphanesini kullanarak ek bir paket yüklemeye gerek kalmadan basit bir HTTP sunucusu oluşturacağız.
Eğer Python’un temellerine veya kurulumuna hâkim değilsen, baştan başlamak için ilgili yazımıza göz atabilirsin.
HTTP Sunucusu Nedir?
HTTP, istemci ile sunucu arasında veri alışverişini mümkün kılan en temel ağ protokolüdür.
Bir HTTP sunucusu , belirli bir portu dinleyerek gelen istekleri alır, bunlara uygun yanıtlar üretir ve istemciye iletir.
Bir kullanıcı tarayıcıya https://ornek-site.com adresini yazdığında,
tarayıcı bu alan adını DNS üzerinden bir IP adresine çevirir.
Elde edilen IP’ye, varsayılan olarak 80 (HTTP) veya 443 (HTTPS) portundan bir istek gönderilir.
Sunucu, bu isteği alır, gerekli içeriği hazırlar ve istemciye yanıt olarak gönderir.
Tarayıcı ise bu yanıtı yorumlayarak kullanıcıya sayfayı görüntüler.
TCP ve Port Nedir?
Bir HTTP isteği, ağ üzerinden belirli bir hedef noktaya yönlendirilir. Bu hedef, bir IP adresi ve port numarasıyla tanımlanır. Bu iki unsur birleştiğinde TCP soket adresi oluşur.
Örneğin yerel ağda çalışan bir sunucunun IP’si 192.168.1.10, portu ise 8080 olabilir.
Tarayıcıya http://192.168.1.10:8080 yazıldığında bu sunucuya erişim sağlanır.

Statik Bir Web Sayfası Oluşturma
Sunucumuzun test amacıyla göstereceği basit bir HTML dosyası hazırlayalım. Herhangi bir metin düzenleyicisini açın ve aşağıdaki içeriği yazın. Ardından bu dosyayı index.html adıyla kaydedin. Sunucumuz, istemci tarafına bu dosyayı iletecektir.
<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
Sık Sorulan Sorular
Port 8080 neden kullanılır?
80 numaralı port genellikle sistemin ana web servisi tarafından kullanılır. 8080 portu ise HTTP trafiği için alternatif bir standarttır ve test veya geliştirme ortamlarında çakışma olmadan tercih edilir.
http.server ile HTTPS (SSL) nasıl eklenir?
Python’un ssl modülünü kullanarak HTTPS bağlantısı etkinleştirilebilir. Bunun için bir .pem uzantılı sertifika oluşturulur ve ssl.wrap_socket() metodu ile bağlantı şifrelenir.
Localhost ile 127.0.0.1 aynı şey mi?
Evet, her ikisi de aynı adresi ifade eder: 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 yerel makineyi gösterir.
SimpleHTTPRequestHandler ne işe yarar?
SimpleHTTPRequestHandler, Python’un temel dosya sunucu sınıfıdır. Gelen HTTP isteklerini dinler, bulunduğu dizindeki dosyaları istemcilere gönderir ve log kaydı tutar.
Sunucuyu arka planda nasıl çalıştırabilirim?
Linux üzerinde:
nohup python -m http.server 8080 &
Windows üzerinde PowerShell’den:
Start-Job { python -m http.server 8080 }
Bu sayede terminal kapansa bile sunucu arka planda aktif kalır.
🎥 Dilersen kısa anlatımlı videoya da göz atabilirsin:
Python ile Basit HTTP Sunucusu Oluşturma