Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
HTTP client, bir web sunucusuna HTTP isteği gönderen ve sunucudan gelen yanıtı işleyen istemci yazılımı veya kodudur. Tarayıcılar, mobil uygulamalar, backend servisleri, komut satırı araçları ve JavaScript içindeki fetch() fonksiyonu HTTP client olarak çalışabilir. Kısaca HTTP client isteği başlatır; sunucu bu isteğe bir HTTP response ile karşılık verir.

Örneğin bir kullanıcı profilini almak isteyen uygulama, sunucuya GET isteği gönderir. Sunucu da durum kodu, başlıklar ve varsa JSON veya HTML içerikten oluşan yanıt döndürür. HTTP protokolü istemci ile sunucu arasındaki iletişim biçimini tanımlar; HTTP client ise bu iletişimi başlatan ve yöneten taraftır.

HTTP client nasıl çalışır?​


Bir HTTP client genellikle şu akışı izler:
  1. İstek yapılacak kaynağın adresini ve HTTP metodunu belirler. Örneğin veri okumak için GET, veri göndermek için POST kullanılır.
  2. Gerekli başlıkları ekler. Accept beklenen yanıt biçimini, Content-Type ise gönderilen verinin türünü belirtmek için kullanılabilir.
  3. Gerekirse istek gövdesini gönderir. JSON tabanlı API isteklerinde gövde çoğunlukla JSON biçimindedir.
  4. Sunucudan gelen durum kodunu, yanıt başlıklarını ve gövdeyi okur.
  5. Başarı, doğrulama hatası, bulunamayan kaynak veya sunucu hatası gibi durumlara göre uygulama karar verir.
HTTP bağlantısında istemci tarafından gönderilen mesaja request, sunucunun cevabına response denir. HTTP stateless bir protokol olduğu için sunucu, iki isteği kendiliğinden aynı kullanıcı oturumunun devamı olarak kabul etmez. Oturum bilgisi gerekiyorsa çerez, yetkilendirme başlığı veya uygulamanın kullandığı başka bir mekanizma isteğe eklenir.

HTTP client türleri ve kullanım alanları​


Aynı görevi farklı HTTP client türleri gerçekleştirebilir. Seçim, isteğin nereden yapılacağına ve yanıtın nasıl işleneceğine bağlıdır.
HTTP clientTipik kullanımKarar noktası
Web tarayıcısıSayfa, CSS, JavaScript ve API verilerini almakKullanıcı etkileşimi ve tarayıcı güvenlik kuralları önemlidir
Backend HTTP kütüphanesiBaşka bir servisin API'sine sunucudan bağlanmakZaman aşımı, yeniden deneme ve hata politikası seçilmelidir
Komut satırı client'ıİstekleri elle test etmek ve teşhis yapmakHam başlıkları ve durum kodlarını hızlıca incelemek için uygundur
Mobil veya masaüstü uygulamaUygulama ile uzak API arasında veri alışverişiBağlantı kopması ve çevrimdışı durumlar ayrıca ele alınmalıdır

JavaScript ile en küçük HTTP client örneği​


Bu örnek, kendi sunucunuzda /api/profile yolunun mevcut olup JSON döndürmesini gerektirir. Örneğin kurgusal {"id":7,"name":"Ayşe"} verisi dönebilir. Bir HTML dosyasını yalnız açmak bu sunucu uç noktasını oluşturmaz. Tarayıcıdaki basit istemci şöyle yazılabilir:

Kod:
async function profilGetir() {
  const yanit = await fetch('/api/profile', {
    method: 'GET',
    headers: {
      'Accept': 'application/json'
    }
  });

  if (!yanit.ok) {
    throw new Error(`HTTP hatası: ${yanit.status}`);
  }

  const profil = await yanit.json();
  console.log(profil);
}

profilGetir().catch(console.error);

Bu örnekte fetch() HTTP client görevini üstlenir. Beklenen başarı sonucu, sunucunun JSON yanıtının profil değişkenine aktarılmasıdır. Yanıt 2xx aralığında değilse yanit.ok değeri false olur ve hata işlenir. JSON çözümlenemiyorsa sunucunun gerçekten JSON döndürüp döndürmediği ve Content-Type başlığı kontrol edilmelidir.

Gerçek projede bir sonraki adım, yalnızca başarılı yanıtı okumak değil; zaman aşımı, bağlantı kopması, yetkisiz erişim ve beklenmeyen yanıt biçimi için de uygulama davranışı belirlemektir. Tarayıcıdan başka bir kaynağa istek yapılıyorsa aynı kaynak politikası ve sunucunun izin verdiği CORS kuralları da dikkate alınmalıdır.

Sık yapılan hatalar​


HTTP client ile HTTP server'ı karıştırmak: Client isteği başlatır; server isteği karşılar ve yanıt üretir. Bir backend uygulaması bazı durumlarda server, başka bir API'ye istek gönderirken client olabilir.

Her yanıtı başarılı kabul etmek: İsteğin teknik olarak tamamlanması, işlemin başarılı olduğu anlamına gelmez. Durum kodu ve yanıt içeriği birlikte değerlendirilmelidir.

İstek gövdesi ile yanıt gövdesini karıştırmak: POST isteğinde gönderilen JSON istek gövdesidir; sunucunun döndürdüğü JSON ise yanıt gövdesidir.

Kimlik doğrulamayı otomatik varsaymak: HTTP client, gerekli çerez veya yetkilendirme bilgisini kendiliğinden her API için sağlayamaz. API'nin beklediği kimlik doğrulama yöntemine göre başlık veya oturum bilgisi eklenmelidir.

Sık sorulan sorular​


Fetch bir 404 yanıtında otomatik olarak catch bloğuna geçer mi?​


Hayır. Fetch, sunucudan 404 veya 500 gibi bir HTTP yanıtı aldığında da normal yanıt nesnesiyle tamamlanabilir. Örnekte response.ok kontrolü bu yüzden açıkça hata fırlatır. Ağ veya CORS engeli gibi durumlarda ise istek reddedilebilir; bunlar HTTP hata yanıtından farklıdır.

Zaman aşımından sonra aynı isteği tekrar etmek güvenli midir?​


Her zaman değil. İstemci yanıtı alamamış olsa da sunucu işlemi tamamlamış olabilir. Özellikle ödeme veya kayıt oluşturan POST isteklerini körlemesine tekrar etmeyin; API’nin idempotency anahtarı, işlem kimliği ve yeniden deneme sözleşmesini izleyin. GET gibi idempotent yöntemlerin anlamı farklıdır.

Sunucuda çalışan HTTP istemcisine de tarayıcı CORS kuralı uygulanır mı?​


CORS tarayıcının uyguladığı bir erişim mekanizmasıdır; sunucudan yapılan HTTP isteği tarayıcı CORS engeline aynı şekilde tabi değildir. Ancak bu durum API kimlik doğrulamasını, yetkilendirmeyi, TLS doğrulamasını veya ağ erişim kurallarını kaldırmaz.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.