Selam dostlar, uzun süredir retro donanım ve gömülü sistemlerle uğraşıyorum ama web geliştirme tarafında tam bir acemiyim. Geçen hafta elime bir Raspberry Pi Pico W geçti ve üzerine MicroPython ile basit bir web sunucusu yazdım. Amacım, odamdaki eski bir LCD ekrana sensör verilerini göndermek için kendi kontrol panelimi yapmaktı. Sunucu çalışıyor, ana HTML sayfası açılıyor, hatta sensör verilerini JSON olarak da döndürebiliyorum. Ama işin içine bir CSS dosyası eklemeye kalktığımda her şey karıştı. Tarayıcıda sayfa açılıyor ama görünüm tamamen dümdüz, hiçbir stil uygulanmıyor. DevTools'a baktığımda CSS dosyasının 'text/html' olarak döndüğünü görüyorum, yani MIME type hatası var. Muhtemelen benim sunucu kodumda content-type ayarını yanlış yapıyorum. Şu anki kodumda her isteğe sadece 'text/html' döndüren basit bir fonksiyonum var. Dosya uzantısına göre doğru MIME type'ı nasıl belirleyebilirim? Ayrıca MicroPython'da dosya okuma işlemlerini bayt bayt mı yapmam gerekiyor, yoksa doğrudan binary olarak okuyup gönderebilir miyim? Yardımcı olursanız sevinirim, çünkü bu iş beni gerçekten çıldırttı.
Pico W ile kendi web sunucumu kurdum ama CSS dosyası bir türlü yüklenmiyor - neyi yanlış yapıyorum?
Cevaplar (3)
09.08.2026 01:48
Merhaba pixeldigger80, hoş geldin web tarafına! Haklısın, sorun büyük ihtimalle MIME type ile ilgili. MicroPython'da basit bir çözüm var: dosya uzantısına göre bir sözlük (dictionary) tanımlayabilirsin. Örneğin:
mime_types = {
'.html': 'text/html',
'.css': 'text/css',
'.js': 'application/javascript',
'.json': 'application/json',
'.png': 'image/png',
'.jpg': 'image/jpeg',
}
İstek geldiğinde dosya adının sonundaki uzantıyı alıp bu sözlükten ilgili MIME type'ı seçebilirsin. Eğer uzantı bulunamazsa varsayılan olarak 'application/octet-stream' döndürebilirsin. Ayrıca dosyayı okuma konusunda: MicroPython'da dosyayı 'rb' modunda açıp doğrudan okuyabilirsin. Ama dikkat et, dosya büyükse (1 MB'dan büyük) Pico'nun RAM'i yetmeyebilir. O yüzden dosyayı parça parça okuyup göndermek daha güvenli olur. Şöyle bir örnek vereyim:
with open(file_path, 'rb') as f:
chunk = f.read(1024)
while chunk:
client.send(chunk)
chunk = f.read(1024)
Bu şekilde hem MIME type'ı doğru ayarlarsın hem de bellek taşması yaşamazsın. Ayrıca HTTP yanıtında Content-Length başlığını da eklemeyi unutma, tarayıcılar bazen onsuz da çalışır ama bazı durumlarda sorun çıkarabilir. Kolay gelsin!
mime_types = {
'.html': 'text/html',
'.css': 'text/css',
'.js': 'application/javascript',
'.json': 'application/json',
'.png': 'image/png',
'.jpg': 'image/jpeg',
}
İstek geldiğinde dosya adının sonundaki uzantıyı alıp bu sözlükten ilgili MIME type'ı seçebilirsin. Eğer uzantı bulunamazsa varsayılan olarak 'application/octet-stream' döndürebilirsin. Ayrıca dosyayı okuma konusunda: MicroPython'da dosyayı 'rb' modunda açıp doğrudan okuyabilirsin. Ama dikkat et, dosya büyükse (1 MB'dan büyük) Pico'nun RAM'i yetmeyebilir. O yüzden dosyayı parça parça okuyup göndermek daha güvenli olur. Şöyle bir örnek vereyim:
with open(file_path, 'rb') as f:
chunk = f.read(1024)
while chunk:
client.send(chunk)
chunk = f.read(1024)
Bu şekilde hem MIME type'ı doğru ayarlarsın hem de bellek taşması yaşamazsın. Ayrıca HTTP yanıtında Content-Length başlığını da eklemeyi unutma, tarayıcılar bazen onsuz da çalışır ama bazı durumlarda sorun çıkarabilir. Kolay gelsin!
09.08.2026 02:21
pixeldigger80 yazdı:
DevTools'a baktığımda CSS dosyasının 'text/html' olarak döndüğünü görüyorum, yani MIME type hatası var.
Evet, tam olarak dediğin gibi. Ben de bir süre önce aynı hatayı yaptım, çünkü her isteğe aynı yanıtı gönderiyordum. vectorcoder11'in önerdiği sözlük yöntemi işe yarar. Ama bir de şu var: Pico W'nin MicroPython sürümünde 'ujson' ve 'micropython' modülleri mevcut. Eğer dosya okuma işlemini çok sık yapıyorsan, dosyayı bir kez okuyup RAM'de cache'leyebilirsin. Ancak CSS dosyan küçükse (genelde öyledir) bu sorun olmaz. Ayrıca, HTTP yanıtında 'Connection: close' başlığını göndermeyi unutma, çünkü tarayıcı bağlantıyı kapatmazsa istekler asılı kalabilir. Benim önerim şu: önce basit bir test yap, bir CSS dosyası oluştur ve tarayıcıdan doğrudan o dosyayı iste. Mesela 'http://pico.local/style.css' yazdığında yanıtın 'text/css' olduğunu görürsen sorun çözülmüş demektir. Eğer hala sorun yaşıyorsan, kodunu buraya paylaş, birlikte bakalım. İyi forumlar!
09.08.2026 04:36
Sorun çözüldü arkadaşlar, çok teşekkür ederim vectorcoder11 ve bytecoder60! Önerileriniz sayesinde MIME type sözlüğünü ekledim ve dosyayı 'rb' modunda parça parça okumaya başladım. Ayrıca 'Connection: close' başlığını da ekledim. Şimdi CSS dosyası doğru bir şekilde yükleniyor ve sayfam istediğim gibi görünüyor. Hatta LCD ekrana verileri gönderme işini de hallettim, artık odamda retro bir hava var. Tekrar teşekkürler, bu forum gerçekten altın değerinde!
Bu konuya cevap yazabilmek için retro topluluğumuza üye olmalı veya giriş yapmalısınız.
İlgili Konular & Benzer Paylaşımlar
PHP 8'de eski bir MySQL kodunu PDO'ya çevirirken karşılaştığım PDOException hatası
Kategori: Web Geliştirme
PHP 8.2 ile eski bir projeyi çalıştırırken hata: Call to undefined function mysql_connect()
Kategori: Web Geliştirme
PHP 8.3'te mcrypt kütüphanesi olmadan AES-256-CBC şifreleme nasıl yapılır?
Kategori: Web Geliştirme