Python kullanarak HTTP web sunucusu nasıl oluşturulur?

Bir internet sitesine girdiğinde gördüğün her sayfa, gerçekte bir sunucudan gelen verinin tarayıcı tarafından işlenmiş biçimidir. Tarayıcı, tıpkı bir postacı gibi isteği gönderir; sunucu da cevabı geri yollar. Sonuçta bu yanıt, sayfa olarak karşımıza çıkar.

Bu süreci yöneten mekanizma, arka planda sürekli çalışan web sunucusudur. İster geliştirici ister sistem yöneticisi ol, web sunucularını anlamak modern yazılımın merkezinde yer alır. Çünkü API’ler, siteler ve basit test araçları bu yapıya dayanır.

Bu içerikte, Python’un standart modülünü kullanarak hiçbir ek kütüphane kurmadan çalışan bir HTTP sunucusu oluşturmayı öğreneceğiz.

Python kurulumu veya temelleri konusunda eksikliğiniz varsa, başlangıç için hazırladığımız rehbere göz atabilirsiniz.

HTTP Sunucusu Nedir?

HTTP, istemciler ile sunucular arasındaki veri iletişimini yöneten temel bir internet protokolüdür.
Bir HTTP sunucusu, belirli bir portta gelen istekleri dinler, uygun yanıtı oluşturur ve bunu istemciye gönderir.

Bir kullanıcı https://ornek-site.com adresine girdiğinde,
tarayıcı bu alan adını DNS sistemi yardımıyla bir IP adresine dönüştürür.

  • Bu IP adresine, genellikle 80 (HTTP) veya 443 (HTTPS) portları üzerinden istek gönderilir.
  • Sunucu isteği yakalar, istenen içeriği üretir ve istemciye yanıt yollar.
  • Tarayıcı ise bu yanıtı çözümler ve sayfa olarak görüntüler.

TCP ve Port Nedir?

Her HTTP isteği, ağda belirli bir hedefi işaret eder. Bu hedef, bir IP adresi ve bir port numarası kombinasyonu ile tanımlanır. Bu birleşim TCP soketi olarak adlandırılır.

Statik Bir Web Sayfası Oluşturma

Sunucunun test sırasında göstereceği örnek bir HTML sayfası oluşturalım. Herhangi bir metin düzenleyiciyi açın ve aşağıdaki içeriği ekleyin. Daha sonra dosyayı index.html ismiyle kaydedin. Sunucumuz, istemcilere bu dosyayı 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 üzerinden çalışan bu basit sistem, temel bir test ortamı oluşturur. Eğer gerçek bir sunucuda güvenli bağlantı kurmak istiyorsan, yönlendirme sürecini detaylıca anlattığımız HTTP’den HTTPS’ye Yönlendirme yazımıza göz atabilirsin.

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)

Yorum yapın