İnternetin Dilini Konuşmak: HTTP 🖥️

Esra Nur Mülkpınar
Bursa Bilişim Topluluğu
10 min readJan 16, 2024

Merhaba sevgili geliştirici dostlarım, kahveler hazırsa bizde hazırırız.🚀 Bugün konumuz HTTP. İyi okumalar diliyorum 👩🏻‍💻

HTTP dünya çapında 1990 yılından itibaren ağ üzerinde kullanılmakta olan iletişim protokolüdür. İnternet üzerinde görmüş olduğunuz web sayfalarının görüntülenmesini sağlayan bir protokoldür. Bu yazımda HTTP’yi inceleyeceğiz.

Eğer Web Dünyasına Giriş yazımı okumadıysanız, bu yazıyı okumadan göz atmanızı tavsiye ederim.

✨ Bu yazıdaki konu başlıkları:

1)HTTP Protokolü

  • HTTP Nedir ?
  • HTTP Ne İşe Yarar ?
  • HTTP Nasıl Çalışır ?
  • HTTP Bileşenleri Nelerdir ?
  • HTTP Durum Kodları

2)HTTPS Protokolü

  • HTTPS Nedir?
  • HTTP ve HTTPS Farkları Nelerdir ?

✨HTTP Nedir ?

HTTP (Hyper Text Transfer Protokol), internet üzerinde bilgi alışverişi için kullanılan bir protokoldür demiştik.

Bir web sitesine eriştiğinizde veya web hizmetleriyle etkileşimde bulunduğunuzda, tarayıcınız HTTP kullanarak sunucularla iletişim kurar.

HTTP protokolü client-server mimarisinde çalışır. Client (istemci) tarafından request (istek) gönderilir ve server (sunucu) tarafından response (cevap) alınır.

İstemci, bir hizmeti veya kaynağı talep eden, genellikle bir kullanıcı veya cihazdır; sunucu ise bu talepleri karşılayan ve hizmeti sağlayan bilgisayar sistemidir.

✨HTTP Ne İşe Yarar ?

HTTP’nin temel görevleri şunlardır:

  1. Veri İletimi: HTTP, kullanıcıların web tarayıcılarından sunuculara ve sunuculardan tarayıcılara veri göndermelerini sağlar. Bu, web sayfalarının, resimlerin, videoların ve diğer medya dosyalarının transferini içerir.
  2. İstek ve Yanıt: HTTP, istemci (tarayıcı) ve sunucu arasında bir istek-yarıt modeli üzerine kuruludur. Tarayıcılar, sunuculardan belirli bir kaynağı (örneğin, bir web sayfasını veya bir resmi) isteyebilir ve sunucu da bu isteği karşılar.
  3. Hypertext Aktarımı: HTTP’nin “Hypertext” kısmı, metin, bağlantılar ve diğer medya türlerini içeren hypertext belgelerinin iletilmesini sağlar. Bu, web sayfalarının ve dokümanların birbirine bağlı olmasını ve kullanıcıların bu bağlantılar aracılığıyla farklı sayfalar arasında gezinmelerini sağlar.
  4. Stateless (Durumsuz) Protokol: HTTP, durumsuz bir protokoldür. Her bir istek-sorun çifti bağımsızdır, yani bir önceki isteklerden veya yanıtlardan bağımsız olarak işlem görür. Bu, her bir HTTP talebinin birbiriyle bağlantılı olmadığı ve her bir isteğin bağımsız olarak ele alındığı anlamına gelir.
  5. URL (Uniform Resource Locator) Yapısı: HTTP, URL’leri kullanarak belirli kaynaklara (örneğin, bir web sayfasına veya bir resme) erişim sağlar. URL’ler, bir kaynağın konumunu belirtmek için kullanılan standart bir tanımlama sistemidir.

✨HTTP Nasıl Çalışır ?

Gün içinde onlarca kez birçok web sitesine giriş sağlıyoruz. Aslında bu işlemi gerçekleştirirken, hiç farkında bile olmadan farklı sunuculara taleplerde bulunuyoruz. Bilgisayar, yani istemci, sunuculara bir web tarayıcısı aracılığı ile istek gönderir.

İsteği alan sunucu, kurulu sunucu programları aracılığı ile yanıt gönderir. Yanıt içeriğinde istek hakkında durum bilgisi yer alır ve istenen içerik de barındırılabilir. Bu sırada devreye http protokolü girer ve güvenli bir şekilde talebin sunulmasını sağlar. Yani http, sunucu üzerine bir giriş talebinde bulunur ve talep üzerinde onay alındığında erişilmek istenilen sitenin verileri karşımıza çıkar, böylelikle site girişi gerçekleştirilmiş olur.

✨HTTP Bileşenleri Nelerdir ?

İnternet üzerinden yapılan her HTTP isteği, farklı bilgi türlerini taşıyan bir dizi kodlanmış veri taşır. Tipik bir HTTP isteği şunları içerir:

  1. HTTP Version Type (Protokol Versiyonu)
  2. URL (Uniform Resource Locator)
  3. HTTP Method
  4. HTTP Request Headers
  5. Optional HTTP Body

HTTP Version Type (Protokol Versiyonu):

  • İsteğin hangi HTTP protokol versiyonunu kullandığını belirtir. Örneğin, “HTTP/1.1” veya “HTTP/2” gibi.

URL (Uniform Resource Locator):

  • Uniform Resource Locator (URL), isteğin yönlendirildiği kaynağın adresini belirtir. Örneğin, “https://www.example.com/index.html" gibi bir URL.

HTTP Method :

  • İstemcinin sunucuya ne tür bir işlem talep ettiğini belirten metottur. Örneğin, “GET”, “POST”, “PUT”, “DELETE” gibi. Her bir metot, belirli bir işlevi temsil eder. Bu metotları birazdan daha detaylı inceleyeceğiz.

HTTP Request Headers :

İsteği ve isteğin niteliklerini tanımlayan başlıklardır. Başlıklar, isteği veya sunucuyla ilgili ek bilgileri içerebilir. Örneğin:

  • Host: Sunucunun adını belirtir (örneğin, "www.example.com").
  • User-Agent: İstemcinin türünü ve sürümünü belirtir (örneğin, tarayıcı adı ve sürümü).
  • Content-Type: İsteğin içeriğinin türünü belirtir (örneğin, "application/json").

Optional HTTP Body :

  • İsteğin gövdesini oluşturan opsiyonel bir bileşendir. Genellikle “POST”, “PUT” gibi metodlarla kullanılır ve genellikle veri taşır. Örneğin, bir formun gönderildiği bir POST isteğinde, form verileri bu bölümde yer alabilir.

Örnek bir HTTP GET isteği:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0

Bu örnekte, isteğin HTTP versiyonu “HTTP/1.1”, isteğin yönlendirildiği URL “/index.html”, kullanılan metot “GET”, ve istek başlıkları “Host” ve “User-Agent” ile belirtilmiştir. İsteğin bir body’i bulunmamaktadır, çünkü bu bir GET isteğidir ve genellikle body içermez.

HTTP bileşenlerini incledik. Şimdi ise HTTP’den gelen yanıtın bileşenlerine göz atalım.

✨HTTP Yanıtının Bileşenleri

HTTP yanıtı, web istemcilerinin (genellikle tarayıcıların) bir HTTP isteğine yanıt olarak bir İnternet sunucusundan aldığı şeydir.

Tipik bir HTTP yanıtı şunları içerir:

  1. HTTP Status Code
  2. HTTP Response Headers
  3. Optional HTTP Body

HTTP Status Code (HTTP Durum Kodu):

İstek sonucunda gerçekleşen durumu belirten üç haneli bir sayıdır. Her durum kodu, belirli bir durumu temsil eder. Örneğin:

  • 200 OK: İstek başarıyla tamamlandı.
  • 404 Not Found: İstek yapılan kaynak bulunamadı.
  • 500 Internal Server Error: Sunucuda bir iç hata oluştu.

Durum kodları, isteğin nasıl işlendiğini veya başarılı olup olmadığını gösterir. Birazdan daha detaylı inceleyeceğiz.

HTTP Response Headers (HTTP Yanıt Başlıkları):

Yanıtın niteliklerini belirten başlıklardır. Bu başlıklar, yanıtın türünü, tarihini, içeriğini ve diğer özelliklerini tanımlar. Örneğin:

  • Content-Type: Yanıtın içeriğinin türünü belirtir (örneğin, "text/html" veya "application/json").
  • Content-Length: Yanıtın içeriğinin uzunluğunu belirtir.
  • Date: Yanıtın oluşturulma tarihini belirtir.

Başlıklar, tarayıcıların ve diğer istemcilerin yanıtı işlemesine yardımcı olur ve ek bilgiler sağlar.

Optional HTTP Body:

Yanıtın içeriğini taşıyan opsiyonel bir bileşendir. Bu, isteğin sonucunda sunucu tarafından gönderilen veriyi içerir. Örneğin:

  • Bir HTML belgesi (text/html)
  • Bir resim dosyası (image/jpeg)
  • Bir JSON verisi (application/json)
  • İçerik tipi, “Content-Type” başlığı ile belirtilir.

Bu bileşenler bir araya geldiğinde, bir HTTP yanıtı kullanıcılara veya istemcilere, gerçekleşen durumu, yanıt başlıklarını ve opsiyonel olarak içeriği ileten bir bilgi paketi sağlar. Örneğin:

HTTP/1.1 200 OK
Date: Sat, 15 Jan 2022 12:00:00 GMT
Content-Type: text/html
Content-Length: 1024
<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>

Bu örnekte, 200 OK durum kodu ile başarılı bir yanıt, headers ve bir HTML içeriği bulunmaktadır.

Bu iletişimin önemli bir yönü, bir isteğin sonucu hakkında bilgi sağlayan durum kodlarının alışverişidir. Şimdi bu durum kodlarına göz atalım.

✨HTTP Durum Kodları

HTTP durum kodları, sunucunun istemcinin isteğine yanıt olarak gönderdiği üç haneli numaralardır. Bu kodlar, isteğe ilişkin başarı, başarısızlık veya diğer koşullar hakkında istemciyi bilgilendirir. Durum kodları, yanıtın farklı bir kategorisini temsil eden beş sınıfa ayrılmıştır.

💡1xx — Informational:

Informational kodlar, sunucunun isteği aldığını ve işleme devam ettiğini gösterir. İstemcinin daha fazla talimat beklemesi gerekir.

  • 100 Continue (Devam Ediyor): İstemci, sunucudan devam etmesine izin vermesini istediği bir istek gönderdi.
  • 101 Switching Protocols (Protokoller Değiştiriliyor): Sunucu, yeni bir iletişim protokolü kullanılmasını isteyen bir isteği kabul etti.
  • 102 Processing (İşleniyor): Sunucu, isteği alarak işleme koydu ancak yanıtı tamamlamadı. İstemci, belirli bir süre sonra tekrar durumu sorgulamalıdır.
  • 103 Early Hints (Erken İpuçları): Sunucu, yanıt gövdesini henüz oluşturmadı, ancak istemciye erken bilgileri gönderiyor.

💡2xx — Success

Success kodlar, istemcinin isteğinin başarıyla alındığını, anlaşıldığını ve kabul edildiğini belirtir. Bu kategoride en yaygın kod, standart bir başarılı HTTP isteğini belirten 200 OK kodudur.

  • 200 OK (Tamam): İstek başarıyla tamamlandı. Sunucu, istemcinin talebini başarıyla işledi ve bir yanıt döndürdü.
  • 201 Created (Oluşturuldu): İstek, yeni bir kaynak oluşturdu ve sunucu bu kaynağı başarıyla oluşturdu.
  • 202 Accepted (Kabul Edildi): Sunucu, isteği aldı ancak hala işlemeye koymadı. İşleme alınacak bir kaynak olduğunu belirtir.
  • 204 No Content (İçerik Yok): Sunucu, isteği başarıyla işledi, ancak yanıt gövdesi içerik içermiyor. İstemci, mevcut sayfayı değiştirmemesi gerektiğini anlar.
  • 206 Partial Content (Kısmi İçerik): Sunucu, istemcinin belirli bir aralıktaki içeriği talep ettiği bir kısmi içerik yanıtı gönderir. Bu genellikle büyük dosyaların parçalar halinde iletimi için kullanılır.

💡3xx — Redirect

Redirect kodları, istemciye isteği tamamlamak için daha fazla işlem yapılması gerektiğini bildirir. Örneğin, 302 Found kodu, istemcinin istenen kaynağı elde etmek için farklı bir URL’yi takip etmesi gerektiğini söyler.

  • 300 Multiple Choices (Birden Fazla Seçenek): İstek, birden fazla seçenek içeriyor ve kullanıcı veya istemci bir seçenek yapmalıdır. Bu durum kodu, alternatif kaynakların bulunduğu durumları ifade eder.
  • 301 Moved Permanently (Kalıcı Olarak Taşındı): İstenilen kaynak, kalıcı olarak başka bir konuma taşındı. İstemci, gelecekteki isteklerini yeni konuma yönlendirmelidir.
  • 304 Not Modified (Değiştirilmedi): İstemci, bir kaynağı daha önce istemiş ve sunucu, bu kaynağın o tarihten bu yana değişmediğini belirtiyor. İstemci, önbellekteki kopyasını kullanabilir.
  • 307 Temporary Redirect (Geçici Yönlendirme): İstenilen kaynak, geçici olarak başka bir konuma taşındı. İstemci, gelecekteki isteklerini yeni konuma yönlendirmelidir, ancak orijinal HTTP metodu korunmalıdır.
  • 308 Permanent Redirect (Kalıcı Olarak Yönlendirme): İstenilen kaynak, kalıcı olarak başka bir konuma taşındı. İstemci, gelecekteki isteklerini yeni konuma yönlendirmelidir ve orijinal HTTP metodu korunmalıdır.

💡4xx — Client Error

Client Error kodları, istemcinin isteğinde bir sorun olduğunu gösterir. Yaygın örnekler arasında 404 Not Found (istenen kaynak bulunamadı) ve 401 Unauthorized (kimlik doğrulaması gerekiyor) bulunur.

  • 400 Bad Request (Hatalı İstek): İstemci tarafından gönderilen istek, sunucu tarafından anlaşılamadı veya işlenemedi. İstek formatında bir hata olabilir.
  • 401 Unauthorized (Yetkisiz): İstemci, kaynağa erişim için kimlik doğrulama gerektiren bir istekte bulundu, ancak geçerli kimlik bilgileri sağlamadı veya kimlik doğrulama başarısız oldu.
  • 403 Forbidden (Yasaklanmış): İstemci, kaynağa erişim için yetkiye sahip değil. Sunucu, istemcinin bu kaynağa erişim izni olmadığını belirtir.
  • 404 Not Found (Bulunamadı): İstenilen kaynak sunucuda bulunamadı. Bu durum kodu, istemcinin talep ettiği kaynağın sunucuda mevcut olmadığını belirtir.
  • 409 Conflict (Çakışma): İstemci tarafından gönderilen istek, sunucudaki mevcut kaynaklarla uyumsuzdur. Bu durum kodu, çakışmaya neden olan bir durumu belirtir, örneğin eş zamanlı düzenleme çatışmalarında kullanılabilir.

💡5xx — Server Error

Server Error kodları, sunucunun geçerli bir isteği yerine getiremediğini gösterir. 500 Internal Server Error, genel bir hatayı işaret eden bir kod olarak kullanılır.

  • 500 Internal Server Error (İç Sunucu Hatası): Sunucu, bir isteği işlerken beklenmeyen bir iç hata oluştu. Bu durum kodu, sunucu tarafında bir sorun olduğunu ve isteğin başarıyla tamamlanamadığını belirtir.
  • 501 Not Implemented (Uygulanmadı): Sunucu, isteği gerçekleştirmek için gerekli işlevselliğe sahip değil veya isteği anlamıyor.
  • 502 Bad Gateway (Kötü Ağ Geçidi): Sunucu, bir başka sunucu veya geçit üzerinden bir isteği yönlendirmeye çalıştı, ancak bu geçit veya sunucu hatalı bir yanıt verdi.
  • 503 Service Unavailable (Hizmet Kullanılamıyor): Sunucu, geçici olarak hizmet dışıdır veya aşırı yük altındadır. Bu durum kodu, sunucunun geçici olarak hizmet dışı olduğunu ve isteğin şu an işlenemediğini belirtir.
  • 504 Gateway Timeout (Geçit Zamanaşımı): Sunucu, bir başka sunucu veya geçit üzerinden bir isteği yönlendirmeye çalıştı, ancak bu geçit veya sunucu belirli bir süre içinde yanıt vermedi. Bu durum kodu, bir geçit üzerinden beklenen yanıtın zaman aşımına uğradığını belirtir.

✨HTTP Metotları ve İşlevleri

HTTP metotları belirli bir eylemi ifade ederler. Bu metotları kullanarak web sunucuları ve istemciler arasında veri iletimi sağlanır. Sunucunun nasıl yanıt vermesi gerektiğini belirler.

💡GET:

  • İşlev: Belirtilen URI’deki kaynağı almak için kullanılır.
  • Örnek Kullanım: Web tarayıcısında bir web sayfasını görüntülemek.

💡POST:

  • İşlev: Belirtilen URI’ye yeni bir kaynak eklemek veya var olan bir kaynağı güncellemek için kullanılır.
  • Örnek Kullanım: Bir formu doldurup göndermek.

💡PUT:

  • İşlev: Belirtilen URI’ye yeni bir kaynak eklemek veya var olan bir kaynağı güncellemek için kullanılır. Ancak, genellikle tam bir kaynağı yerleştirir, yani var olan kaynağı tamamen değiştirir.
  • Örnek Kullanım: Bir dosyayı yüklemek veya bir kaynağı tamamen değiştirmek.

💡DELETE:

  • İşlev: Belirtilen URI’deki bir kaynağı silmek için kullanılır.
  • Örnek Kullanım: Bir kaynağı silmek.

💡PATCH:

  • İşlev: Belirtilen URI’deki bir kaynağın kısmi bir güncellemesini yapmak için kullanılır.
  • Örnek Kullanım: Bir kaynağın belirli bir alanını güncellemek.

💡HEAD:

  • İşlev: GET metoduna benzer, ancak sadece başlık bilgilerini alır ve gerçek veriyi getirmez. Genellikle bir kaynağın meta verilerini almak için kullanılır.
  • Örnek Kullanım: Bir dosyanın son değiştirilme tarihini almak.

💡OPTIONS:

  • İşlev: Belirtilen URI’deki kaynağa uygulanan HTTP metodlarını ve diğer özellikleri sorgulamak için kullanılır.
  • Örnek Kullanım: Bir sunucunun desteklediği metodları kontrol etmek.

💡TRACE:

  • İşlev: Belirtilen URI’deki bir kaynağa gelen isteği geri takip etmek için kullanılır. Genellikle hata ayıklama amaçları için kullanılır.
  • Örnek Kullanım: İsteklerin nasıl yönlendirildiğini kontrol etmek.

💡CONNECT:

  • İşlev: Proxy sunucu üzerinden başka bir sunucuya bağlanmak ve proxy sunucuyu bir tünel gibi kullanmak için kullanılır.
  • Örnek Kullanım: Güvenli bağlantılar (HTTPS) için bir proxy sunucu kullanarak sunucuya erişim sağlamak.

HTTPS Nedir?

HTTP (Hypertext Transfer Protocol) ve HTTPS (HTTP Secure), her ikisi de internet üzerinde bilgi alışverişi için kullanılan protokollerdir. Ancak, aralarında önemli farklar bulunmaktadır. Şimdi bu farklara göz atalım.

HTTP ve HTTPS Farkları Nelerdir ?

Günümüzde, web siteleri genellikle güvenlik ve gizlilik nedenleriyle HTTPS kullanmaya yönelmektedir. Özellikle kullanıcıların kişisel bilgilerini girdikleri veya finansal işlemler gerçekleştirdikleri durumlarda HTTPS kullanımı önemlidir. Bu, veri iletimini şifreleyerek kullanıcıların bilgilerini korur ve internet üzerinde daha güvenli bir deneyim sunar. O halde HTTP ve HTTP’sin farkları nelermiş incelemeye başlayabiliriz.

Güvenlik:

  • HTTP: Veri iletimi şifrelenmemiştir. Bu nedenle, gönderilen bilgiler açık bir şekilde okunabilir. Güvenli olmayan bağlantılar üzerinden yapılan veri iletimlerinde gizlilik riski vardır.
  • HTTPS: Veri iletimi şifrelenir. Bu, kullanıcıların ve sitenin bilgilerinin güvenli bir şekilde iletilmesini sağlar. HTTPS, SSL/TLS (Secure Sockets Layer/Transport Layer Security) protokollerini kullanarak şifreleme sağlar.

URL Yapısı:

  • HTTP: URL “http://” ile başlar.
  • HTTPS: URL “https://” ile başlar. Bu, güvenli bağlantıyı temsil eder.

Port Numarası:

  • HTTP: Genellikle port 80 kullanır.
  • HTTPS: Genellikle port 443 kullanır.

Güvenlik Belgesi:

  • HTTP: Güvenlik belgesine ihtiyaç duymaz.
  • HTTPS: Güvenli bir bağlantı kurabilmek için bir SSL/TLS sertifikasına ihtiyaç duyar. Bu sertifika, ziyaret edilen web sitesinin kimlik doğrulamasını sağlar.

SEO Etkisi:

  • HTTP: Güvenli değildir. Google ve diğer arama motorları, HTTPS kullanan sitelere bir avantaj tanıyarak, güvenli siteleri öne çıkarabilir.
  • HTTPS: Güvenli bir bağlantı kullanır ve bu nedenle SEO açısından avantaj sağlayabilir.

Çerez Güvenliği:

  • HTTP: Çerezler (cookies) şifrelenmemiş olarak iletilir ve bu, güvenlik açısından risk teşkil edebilir.
  • HTTPS: Çerezler şifrelenir, bu da daha güvenli bir çerez iletimini sağlar.

Eğer yazıyı beğendiyseniz, diğer içeriklerime göz atmayı unutmayın. Keyifli okumalar! 📚

Bana destek olmak için kahve ısmarlayabilirsiniz 🌟

Benimle iletişime geçmek isterseniz: Esra Nur Mülkpınar

--

--