HTTP Mesaj Yapısı Request, Response nedir? İçeride neler dönüyor? Metotları nelerdir? Status kodlar nedir?

Fırat Esatoğlu
4 min readAug 31, 2020

--

HTTP nedir, ne işe yarar diye soracak olursan; Aşağıdaki linkte daha önce HTTP ile ilgili yazdığım Blog’a göz atabilirsin.

HTTP ‘de 2 adet mesaj formatı vardır.

Bunlar; Request ve Response (HTTP istek ve HTTP tepki-cevap) mesajlarıdır.

Request message (İstek Mesajı) Yapısı;

Genel olarak yapısına bakacak olursak;

Request (İstek) mesajı

Yukarıda Gördüğümüz bir Request’in sunucu tarafına giden mesaj formatıdır. Detaylı olarak incelersek;

En üst kısımın talep kısmı olduğunu görüyoruz. Yani istek mesajının hangi Metot ile gönderileceğini, URL bilgisini ve HTTP Versiyon bilgisinin olduğu alanlar mevcut

Daha sonra başlık bilgisinin yer aldığı bir alan.

Ve son olarak mesajın bir içeriği varsa, mesaj bilgisinin Body kısmında yer aldığı alanlar mevcut.

HTTP Versiyon bilgisi;
HTTP/0.9 ve /1.0 versiyonlarında, bağlantı tek bir “Request-Response” aşaması yaşadıktan sonra kapanır. HTTP/1.1 ile beraber “keep-alive” başlığı ile bağlantılar bir süre kalıcı hale getirilebilir ve istemci sunucuya yolladığı ilk istek-cevap döngüsünden sonra tekrar TCP bağlantısını açmak, onaylatmak zorunda kalmaz.

HTTP Başlık bilgileri nelerdir?
HTTP başlıkları, istemci ve sunucunun istek veya tepki (request-response) mesajı ile birlikte bize bağlantı hakkında ek bilgiler iletmesini sağlar.

Başlık bilgileri uzun olduğu için bu Blog içerisine yazamayacağım, onun için direkt olarak bu adresten yarı İngilizce yarı Türkçe olan kaynaktan başlık bilgilerine bakabilirsiniz.
Link: https://developer.mozilla.org/tr/docs/Web/HTTP/Headers

Peki Nedir bu Request mesajı ve Metotları?

Request’ istemci tarafından sunucu tarafına tam olarak Web sitesi ilgili ne yapacağımızı bildirdiğimiz bir mesajdır. En basitinden Twitter’da yeni kullanıcı oluştururken veya Twitter’a giriş yaparken sunucudan bir istekte bulunmuş olursunuz. Bu isteğin durumu, metotlara göre değişmektedir;

HTTP/1.0 versiyonu sadece;
GET, POST ve HEAD Metotlarını destekler.
HTTP/1.1 versiyonunda;
GET, POST, HEAD, PUT, DELETE Metotları bulunmaktadır.

( Ek olarak; CONNECT, OPTIONS, TRACE, PATCH metotları da bulunmaktadır.)

GET; Bu metot sunucudan veri almak için kullanılır.
GET metotu ile sorgu metinleri URL içinde gönderilebilir.
Güvenlik açısından URL’in ekran görüntüleniyor olması ve yaptığınız GET isteğin sunucu kayıtlarına iz bırakabildiği için, parametrelerin gizlilik ihtiyacı varsa POST metodu kullanılabilir.
Karakter Limiti vardır. (2048 Karakter)

GET /firat/form?user=firat&pass=firat HTTP/1.1
Host: firatesatoglu.com

http://firatesatoglu.com/firat/form?user=firat&pass=firat şeklinde bir “URL” oluşmuş olur. Kullanıcı bilgisi GET ile gönderilmemelidir.

POST; Bu metot ile sunucu üzerine bir veri yazdırılabilir.
Bu istek parametreleri, body (gövde) kısmında gönderir. URL’da görünmez, sunucu kayıtlarına işlemez.
Kullanıcı bilgileri veya nispeten büyük veriler bu metotla gönderiler.
Karakter Limiti yoktur.

POST /firat/form HTTP/1.1
Host: firatesatoglu.com
username=firat&passwd=firat

HEAD; GET metoduyla benzerdir. Ancak bir yanıt gövdesi (body) bulunmaz.
Genelde bir kaynağın var olup olmadığını sorgulamak için kullanılır.

PUT; Bu metot ile kimiz zaman kaynağınızı belirli bir yerden güncellemek, belirli bir kaynağa veri yüklemek için kullanılabilir.

PUT /firat/kaynak HTTP/1.1
Host: firatesatoglu.com
Cotent-type: text/html
Content-size: 18

<p>Medium Blog yazısı<p>

DELETE; Sunucu üzerinde belirtilmiş kaynağı silmek için kullanılır.

DELETE /firat/kaynak HTTP/1.1
Host: firatesatoglu.com

CONNECT; Bu metot, istenen kaynakla iki yönlü iletişimi başlatır. Bir Tünel açmak için kullanılabilir (Proxy sunucusu üzerinden başka bir sunucuya bağlanılabilir.)
Bu istek ile HTTP Proxy sunucusundan TCP bağlantısını istenen hedefe tünellemesini ister . Sunucu daha sonra istemci adına hedefle arasında bağlantı kurmaya devam eder. Bağlantı sunucu tarafından kurulduktan sonra, Proxy sunucusu, istemciye ve istemciden TCP akışını Proxy yapmaya devam eder.
Tabi bu durumda Proxy sunucularının tünel oluşturabilmesi için yetkiye ihtiyacı olabilir, Proxy-Authorization başlık bilgisi istek içerisine eklenmelidir.

CONNECT firatesatoglu.com:80 HTTP/1.1

yetkiye ihtiyacı olduğu durumda;

CONNECT firatesatoglu.com:80 HTTP/1.1
Host: firatesatoglu.com:80
Proxy-Authorization: basic ZsSxcmF0ZXNhdG9nbHU=

OPTIONS; Bu metod belli bir kaynak için kullanılabilecek, iletişim seçeneklerini, HTTP metotlarını sunucudan sorgulamak için kullanılır.

OPTIONS /firat HTTP/1.1
Host: firatesatoglu.com

Sunucudan geri dönen tepki mesajı (Response) içerisinde “Allow” başlık bilgisi altında iletişim seçeneklerini görebiliyoruz;

HTTP/1.1 200 OK
Allow: GET, HEAD, POST, OPTIONS, TRACE

TRACE; İstek-Cevap (Request-Response) döngüsü içerisinde, bir hata giderme mekanizması sağlayarak, hedef kaynak yolu boyunca yapılan değişikliklerin tespitini yapmamızı sağlar.

PATCH; Bu metot ile kaynak üzerinde kısmi değişiklikler uygulamak için kullanılır.
PUT metodu ile karşılaştırılabilir ama PUT direkt olarak üzerine yazabileceği için bunu istemediğiniz durumda PATCH metodu kullanılmalıdır.

PATCH /mediumblog HTTP/1.1
Host: www.firatesatoglu.com
Content-Type: text/html
Content-Length: 100

Medium Blog Yazısı Devamı

Response message (Cevap-Tepki mesajı) Yapısı;

Yukarıdaki görselde; Sunucu, istemci tarafından gelen Request’e karşılık üretmiş bir Response mesajını görüyoruz.

HTTP versiyonun ve Statü bilgisinin belirtildiği,
Genel başlık bilgilerinin bulunduğu bir alan mevcut.

HTTP Request isteğine karşılık Sunucu Request’i alır ve kendi içerisinde işler. Response olarak istemciye, bağlantı ile ilgili başlık bilgilerini “Header” kısmına ekler, istemci tarafından istenen veriyi Body(Gövde) bölgesine ekler ve bir cevap gönderir.

Status Code ( HTTP yanıt kodları) nedir?

Kısaca Yanıt kodları; HTTP isteğinin başarıyla tamamlanıp tamamlanmadığını gösterir.

100–199 (1xx) Bilgilendirme: Tarayıcı tarafından gönderilen isteğin sunucuya ulaştığını ve işlemin gerçekleştiğini, tamamlandığını her şeyin yolunda gittiğini ifade eden durum kodlarıdır.

200–299 (2xx) Başarılı: Tarayıcı tarafından gönderilen isteğin sunucuya ulaştığını, anlaşıldığını ve başarılı olduğunu ifade eden durum kodlarıdır.

300–399 (3xx) Yönlendirme: Erişilmek istenen kaynağın başka bir kaynağa taşındığını ve bir yönlendirmenin söz konusu olduğunu ifade eden durum kodlarıdır.

400–499 (4xx) İstemci Hatası: İsteğin yerine getirilemediğini, ilgili Web nesnesine ya da Web sitesine ulaşılamadığını ifade eden durum kodlarıdır.

500–599 (5xx) Sunucu Hatası: Tarayıcı tarafından gönderilen isteğin başarıyla sunucuya ulaştığını fakat sunucu tarafındaki sorunlar nedeniyle isteğin yerine getirilemediğini ifade eden durum kodlarıdır.

HTTP yanıt kodları yine başlık bilgileri gibi uzun oldukları için detaylı olarak
Link; https://developer.mozilla.org/tr/docs/Web/HTTP/Status
üzerinden 100–500 arası bütün yanıt kodlarına bakabilirsiniz.

--

--