HTTP 101: HTTP ile İlgili Temel Kavramlar
HTTP’nin açılımı, HyperText Transfer Protocol’dür. Bu protokol bir sunucu (server) ile bir istemci (client) arasındaki haberleşemeye olanak sağlayan, tanımlanmış kurallar bütünüdür. Bu yazı HTTP hakkında giriş seviyesi niteliğindedir. Eğer uygulama geliştirme ile ilgileniyorsanız, bu yazının ötesinde araştırma yapmanızı tavsiye ederim. Zira günümüzde neredeyse tüm modern uygulamalar HTTP ile haberleşmektedirler.
HTTP Durumsuzdur (Stateless)
HTTP’nin durumsuz olmasının anlamı, sunucuya gelen hiçbir istek arasında, aynı bağlantı içinde dahi olsa, herhangi bir bağlantı yoktur. HTTP’nin durumsuz olması, istemcinin sunucuya art arda istek gönderdiği ve önceki istekler hakkında bilginin saklanması gerektiği durumlarda, sorun yaratabilir. Bu gibi durumlarda HTTP çerezleri (cookie) ve isteklerin başlıklarına eklenen bilgiler sayesinde önceki isteklere ait bilgiler saklanabilir ve kullanıcının oturumu yönetilebilir.
HTTP URL
URL aslında herkesin aşina olduğu, internet üzerinde bir kaynağı temsil eden, özgün adrestir. Uniform Resource Locator yani çevirisi ile tek tip kaynak konumlandırıcıdır.
Url bu aşağıdaki kısımlardan oluşabilir.
http://www.google.com/search/text/q?=test#section3
http → Verinin transfer edileceği protokolü belirleyen kısım, http, https, ftp, mailto, file olabilir.
www.google.com →Kaynakları içeren alanın adı, alan adı sistemi ile (DNS) ile çözülebilecek bir isim veya sunucunun IP adresi olabilir.
search/text→ Sunucu üzerindeki sayfa veya alana işaret eden kısım.
q → Sorgu kısmı, “q” değişkeni “test” isimli dizi tipindeki veriyi sunucuya gönderir.
#section3 → Kaynağın veya sayfanın bir alanını veya bir kısmını referans vermeye yarayan bölüm eki.
HTTP Metotları
HTTP sunucuya yapılacak olan isteğin tipini belirlemek için sekiz farklı method kullanır (HTTP Methods). Bu metotlara aynı zamanda HTTP Fiilleri de denir (HTTP Verbs).
Genel Metotlar aşağıdaki gibidir.
- Get: Sunucuda halihazırda bulunan bir kaynağa erişim için kullanılır.
- Post: Sunucu üzerinde yeni bir kaynak oluşturmak için kullanılır. Post istekleri genellikle yeni oluşturulacak kaynağa ait bilgiyi de taşırlar.
- Put: Sunucudaki bir kaynağı güncellemek için kullanılır. Bu istekler de genellikle üzerilerinde değiştirilmek istenen bilgiyi taşırlar.
- Patch: Bu metot da sunucudaki bir kaynağı değiştirmek için kullanılır. Put ile arasındaki fark ise Put sunucudaki kaynağı yeni bir kaynak ile değiştirmek için kullanılır iken, Patch bu kaynağında bir kısmını değiştirmeye yarar.
- Delete: Sunucudaki bir kaynağı silmeye yarar.
Daha az kullanılan metotlar ise aşağıdaki gibidir:
- Connect: Sunucu ile bir bağlantı oluşturma isteği gönderir. Sunucu bağlantılarını minimum yük ile test etme olanağı sağlar.
- Head: Sunucuya aynı Get metodu gibi ancak sadece başlığı olan (Request Header), gövdesi olmayan(Request Body) bir istek gönderir. Genellikle sunucuda bir kaynak mevcut mu veya kaynağın en son güncellenme bilgisi için kullanılır.
- Options: Sunucunun desteklediği metotları kontrol etmek için kullanılır.
- Trace: Bu metod ile bir sunucuya istek gönderdiğinizde, aradaki tüm vekil sunucular (Proxy, Gateway) isteğin başlığına kendi IP veya DNS biglilerini eklerler. Genellikle hata ayıklama/bakım işleri için kullanılır.
HTTP Durum Kodları
1xx Bilgi Mesajları: HTTP 1.1 versiyonunu destekleyen istemciler bu mesajları alabilirler. Tamamen geçici bilgilendirme amaçlı mesajlardır.
Ör: 100 — Continue; Şu ana kadar herşey iyi, istek göndermeye devam edebilirsin.
2xx Başarı Mesajları: Bir eylemin başarılı olduğunu belirten mesajlardır.
Ör: 200 — OK; Başarılı geri dönüş mesajları isteğe göre anlam kazanır. Get istekleri karşılığında dönen 200 kodlu mesaj, kaynak bulundu ve geri döndürüldü anlamına gelirken, Head istekleri karşılığı gelen 200 kodlu mesaj kaynak ile bilgileri başlıkta bulabilirsin anlamına gelir.
3xx Yönlendirme Mesajları: Bu mesaj serisi istemcinin, istenen kaynağa ulaşmak için daha fazla eyleme ihtiyaç duyacağını belirtir.
Ör: 301 — Moved Permanently; İstenen kaynak kalıcı olarak başka bir URL e yönlendirildi.
4xx İstemci Hata Mesajları: Bu mesajlar sunucuya yapılan isteğin hata içerdiğini ve isteğin karşılanamayacağını belirtir.
Ex: 404 — Not Found; En çok bilinen durum mesajlarından bir tanesidir. İstenen kaynak bulunamadı anlamına gelir.
5xx Sunucu Hata Mesajları: Bu mesaj serisi sunucu tarafında bir hata olduğunu ve sunucunun isteği karşılayamayacağını belirtir.
Ex:500 — Internal Server Error: Sunucu tarafında beklenmeyen bir hata oluştu.
HTTP Başlıkları
HTTP başlıkları, “:” karakteri ile ayrılmış anahtar-değer çiftleridir. İstemci ve sunucu ile ilgili, istek veya geri dönen cevap ile ilgili, gönderilen veri ile ilgili, ekstra bilgi içerebilirler.
Dört çeşit başlık vardır:
- Genel: hem istek hemde geri dönen cevaplarda olabilir.
- İstemci İsteği (Client Request): yalnızca sunucuya yapılan isteklerde kullanılırlar. İsteği yapan istemci ve istenen kaynak ile ilgili ekstra bilgi içerebilirler.
- Sunucu Cevabı (Server Response): yalnızca sunucunun döndüğü cevap mesajlarında bulunurlar. Kaynağın ve sunucunun durumu ile ilgili bilgi içerirler.
- Varlık (Entity Header): Sunucuya gönderilen objeler ile ilgili meta bilgisi içerirler.
Konu ile ilgili daha detaylı bilgi için bu linkteki kaynağı inceleyebilirsiniz.