HTTP Rehberi

Hüseyin

Üye
Top Poster Of Month
Katılım
21 Ocak 2024
Mesajlar
113
Tepkime puanı
29
Puanları
28
HTTP

Hypertext Transfer Protocol (HTTP), HTML gibi hipermedya belgelerini iletmek için kullanılan bir uygulama katmanı protokolüdür. Web tarayıcıları ve web sunucuları arasındaki iletişim için tasarlanmıştır, ancak başka amaçlar için de kullanılabilir. HTTP klasik bir istemci-sunucu modelini takip eder, bir istemci istekte bulunmak için bir bağlantı açar ve ardından bir yanıt alana kadar bekler. HTTP durumsuz bir protokoldür, yani sunucu iki istek arasında herhangi bir veri (durum) tutmaz. - MDN Web Dokümanları


HTTP İstek Yöntemleri

HTTP yöntemleri, URL'ler tarafından tanımlanan kaynaklar üzerinde gerçekleştirilebilecek eylemleri tanımlar. İşte yaygın olarak kullanılan yöntemlerin bir özeti:

GET:
Amaç: Sunucudan veri alır.
Kullanım şekli: Belirli bir kaynaktan, üzerinde değişiklik yapmadan veri istemek için kullanılır. Veriler URL'nin bir parçası olarak, tipik olarak sorgu dizesinde gönderilir.
Örnek: GET /api/users GET /api/users kullanıcıların bir listesini getirir.

POST:
Amaç: Sunucu tarafından işlenmek üzere veri gönderir.
Kullanım şekli: Yeni bir kaynak oluşturmak veya işlenmek üzere veri göndermek için kullanılır. Veriler isteğin gövdesine dahil edilir.
Örnek: POST /api/users kullanıcı bilgilerini içeren bir istek gövdesi ile yeni bir kullanıcı oluşturur.

PUT:
Amaç: Mevcut bir kaynağı günceller veya değiştirir.
Kullanım şekli: Mevcut bir kaynağı güncellemek veya mevcut değilse bir kaynak oluşturmak üzere sunucuya veri göndermek için kullanılır. Veriler isteğin gövdesine dahil edilir.
Örnek: Güncellenmiş kullanıcı bilgilerini içeren bir istek gövdesi ile PUT /api/users/123, 123 ID'li kullanıcıyı değiştirir.

DELETE:
Amaç: Belirtilen bir kaynağı siler.
Kullanım şekli: Bir URL ile tanımlanan bir kaynağın kaldırılmasını istemek için kullanılır.
Örnek: DELETE /api/users/123 123 ID'li kullanıcıyı siler.

PATCH:
Amaç: Bir kaynağı kısmen günceller.
Kullanım şekli: Bir kaynağa kısmi değişiklikler uygulamak için kullanılır. Değişiklikler isteğin gövdesine dahil edilir.
Örnek: Kısmi kullanıcı verileri içeren bir istek gövdesi ile PATCH /api/users/123, 123 ID'li kullanıcının belirli alanlarını günceller.


HTTP İstek Yapısı

Bir HTTP isteği, istemciden sunucuya bilgi ileten birkaç temel bileşenden oluşur. İşte yapısına genel bir bakış:

İstek Satırı:
Yöntem: Gerçekleştirilecek eylemi belirtir (örneğin, GET, POST, PUT, DELETE, PATCH).
URL: Talep edilen kaynağı veya uç noktayı belirtir. Bir yol ve sorgu parametreleri içerebilir.
HTTP Sürümü: Kullanılan HTTP protokolü sürümünü belirtir (örn. HTTP/1.1).

Örnek:

GET /api/users?age=25 HTTP/1.1

Headers:
Amaç: İçerik türü, kullanıcı aracısı ve kimlik doğrulama ayrıntıları gibi istek hakkında ek bilgiler sağlar.
Common Headers:
Content-Type: İstek gövdesinin medya türünü belirtir (örn. application/json).
Authorization (Yetkilendirme): İsteğin kimlik doğrulaması için kimlik bilgilerini içerir (örn. taşıyıcı belirteci).
Accept: İstemcinin almak istediği ortam türlerini belirtir (örn. application/json).

Örnek:
Content-Type: application/json
Authorization: Bearer <token>
Accept: application/json

Body:
Amaç: İstekle birlikte gönderilen verileri içerir, genellikle POST, PUT ve PATCH gibi yöntemlerle kullanılır. Body'nin GET istekleri ile kullanılmadığını unutmayın.
Content: Content-Type başlığına bağlı olarak JSON, XML veya form kodlu veriler gibi çeşitli veri biçimlerini içerebilir.

Örnek:
{
"name": "PwnLab",
"age": 3
}

Örnek:
POST /api/users HTTP/1.1
Content-Type: application/json
Authorization: Bearer <token>
Accept: application/json

{
"name": "PwnLab",
"age": 3
}

HTTP Yanıt Yapısı

Bir HTTP yanıtı, sunucudan istemciye bilgi sağlayan birkaç temel bileşenden oluşur. İşte yapısına genel bir bakış:

Status Line (Durum Satırı):
HTTP Versiyon: HTTP Versiyonu: Kullanılan HTTP protokolü sürümünü belirtir (örneğin, HTTP/1.1).
Status Code (Durum Kodu): İsteğin sonucunu belirtir (örn. 200, 404, 500).
Reason Phrase: Durum kodunun metinsel bir açıklamasını sağlar (örn. OK, Not Found).

Örnek:

Headers:
Purpose (Amaç): İçerik türü, sunucu ayrıntıları ve önbelleğe alma yönergeleri gibi yanıt hakkında ek bilgiler sağlar.
Yaygın Başlıklar:
Content-Type: Yanıt gövdesinin medya türünü belirtir (örn. application/json).
Content-Length: Yanıt gövdesinin boyutunu bayt cinsinden belirtir.
Cache-Control: Yanıtın tarayıcılar veya ara proxy'ler tarafından nasıl önbelleğe alınacağını yönlendirir.

Örnek:
Content-Type: application/json
Content-Length: 123
Cache-Control: no-cache

Body:
Purpose (Amaç): İstemcinin isteğine yanıt olarak sunucu tarafından döndürülen verileri içerir. Bu, JSON, HTML veya düz metin gibi çeşitli formatlarda olabilir.
Content: Gövdenin biçimi ve yapısı Content-Type başlığına ve döndürülen belirli kaynağa bağlıdır.

Örnek:
{
"id": 123,
"name": "PwnLab",
"age": 3
}

Örnek:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 123
Cache-Control: no-cache

{
"id": 123,
"name": "PwnLab",
"age": 3
}


HTTP Headers
HTTP header'ları hem HTTP isteklerinde hem de yanıtlarında gönderilen anahtar-değer çiftleridir. Hem istemciler hem de sunucular için gerekli meta verileri ve talimatları sağlarlar. Başlıklar, istek veya yanıt hakkında bilgi iletmek, web iletişiminin davranışını kontrol etmek ve etkileşimin çeşitli yönlerini yönetmek için kullanılır.

Önemli HTTP Başlıkları

Burada, amaçları ve alabilecekleri değer örnekleri de dahil olmak üzere bazı önemli HTTP başlıklarına genel bir bakış yer almaktadır:

Authorization:
Amaç: İsteğin kimliğini doğrulamak için kimlik bilgilerini içerir. Erişim belirteçleri veya diğer kimlik doğrulama verilerini sağlamak için kullanılır.
Örnekler:
Authorization: Taşıyıcı <token>
Authorization: Basic dXNlcjpwYXNzd29yZA==

Accept:
Amaç: İstemcinin sunucudan almak istediği ortam türlerini belirtir. Sunucunun, istemcinin hangi biçimleri işleyebileceğini anlamasına yardımcı olur.
Örnekler:
Accept: application/json
Accept: text/html, application/xhtml+xml
Accept: */*

Cookie:
Amaç: Depolanan çerezleri istemciden sunucuya gönderir. Oturum durumunu korumak ve kullanıcı bilgilerini izlemek için kullanılır.
Örnekler:
Çerez: sessionId=abc123; userId=7890
Çerez: theme=dark; language=tr-TR

Set-Cookie:
Amaç: Çerezleri depolanmak üzere sunucudan istemciye gönderir. Sunucunun, gelecekteki isteklerde istemci tarafından geri gönderilecek çerezleri ayarlamasını sağlar.
Örnekler:
Set-Cookie: sessionId=abc123; Path=/; HttpOnly
Set-Cookie: userId=7890; Expires=Wed, 21 Aug 2024 07:28:00 GMT; Güvenli

Content-Length:
Amaç: Yanıt gövdesinin boyutunu bayt cinsinden belirtir. İstemcinin yanıtın tam olarak ne zaman alındığını belirlemesini sağlar.
Örnekler:
İçerik-Uzunluğu: 1234
Content-Length: 0 (gövde içermeyen yanıtlar için)

Content-Type:
Amaç: Yanıt gövdesinin ortam türünü belirtir. Bu, istemciyi gönderilen veri türü hakkında bilgilendirir.
Örnekler:
Content-Type: application/json
Content-Type: text/html; charset=utf-8
Content-Type: image/png

Location:
Amaç: Yönlendirmelerde, istemcinin yönlendirilmesi gereken URL'yi belirtmek için kullanılır. Bu başlık genellikle 3xx gibi durum kodlarıyla kullanılır.
Örnekler:
Location: /new-page
Location: https://example.com/login

Host:
Amaç: Sunucunun alan adını ve isteğe bağlı olarak port numarasını belirtir. Sanal barındırma durumlarında isteği doğru sunucuya yönlendirmek için kullanılır.
Örnekler:
Host: example.com
Host: api.example.com:8080

Content-Disposition:
Amaç: İçeriğin istemci tarafından nasıl görüntüleneceğini veya işleneceğini belirtir, genellikle dosya indirmeleri için kullanılır.
Örnekler:
Content-Disposition: attachment; filename="example.pdf”
Content-Disposition: inline; filename="document.html"

HTTP Status Codes

HTTP durum kodları, bir HTTP isteğine yanıt olarak sunucu tarafından döndürülen üç basamaklı sayılardır. İsteğin sonucunu gösterirler ve yanıtın başarısı, başarısızlığı veya diğer sonuçları hakkında bilgi sağlarlar. İşte en önemli ve yaygın olarak kullanılan HTTP durum kodlarına genel bir bakış:

1xx Informational

100 Continue (Devam):
Amaç: Bir isteğin ilk kısmının alındığını ve istemcinin istekle devam etmesi gerektiğini belirtir.
Örnek: Genellikle müşterinin daha fazla talimat için beklemesi gereken durumlarda kullanılır.

2xx Success

200 OK:
Amaç: İsteğin başarılı olduğunu ve sunucunun istenen verileri döndürdüğünü gösterir.
Örnekler:
200 OK, veri döndürülen başarılı bir GET isteği için.
200 OK kaynağın oluşturulduğunu gösteren başarılı bir POST isteği için.

201 Created:
Amaç: İsteğin başarılı olduğunu ve yeni bir kaynağın oluşturulduğunu belirtir.
Örnekler:
201 Yeni bir kullanıcı oluşturan başarılı bir POST isteği için oluşturuldu.
201 Bir veritabanına yeni bir kaynak başarıyla eklendiğinde oluşturuldu.

204 No Content:
Amaç: İsteğin başarılı olduğunu, ancak yanıt gövdesinde gönderilecek içerik olmadığını belirtir.
Örnekler:
204 Başarılı bir DELETE isteği için İçerik Yok.
204 No Content, ek veri döndürülmesi gerekmeyen başarılı bir PUT isteği için.

3xx Redirection

301 Moved Permanently:
Amaç: Kaynağın kalıcı olarak yeni bir URL'ye taşındığını ve gelecekteki isteklerin bu URL'yi kullanması gerektiğini belirtir.
Örnekler:
Bir web sitesi URL'si kalıcı olarak değiştiğinde 301 Kalıcı Olarak Taşındı.
301 Moved Permanently SEO'da eski URL'leri yenilerine yönlendirmek için kullanılır.

302 Found:
Amaç: Kaynağın geçici olarak yeni bir URL'ye taşındığını, ancak gelecekteki isteklerin orijinal URL'yi kullanmaya devam etmesi gerektiğini belirtir.
Örnekler:
302 Found, oturum açma akışları gibi geçici yönlendirmeler için.
302 Found, bir kaynak geçici olarak farklı bir konumda kullanılabilir olduğunda.

304 Not Modified:
Amaç: Kaynağın son istekten bu yana değiştirilmediğini, bu nedenle istemcinin önbelleğe alınmış sürümünü kullanabileceğini belirtir.
Örnekler:
304 Not Modified, içeriğin değişip değişmediğini kontrol etmek için önbelleğe alma başlıkları kullanıldığında.
Performansı artırmak için koşullu GET isteklerine yanıt olarak 304 Not Modified.

4xx Client Error

400 Bad Request:
Amaç: Geçersiz sözdizimi nedeniyle sunucunun isteği anlayamadığını gösterir.
Örnekler:
400 Bad Request hatalı biçimlendirilmiş istek sözdizimi veya geçersiz istek mesajı çerçevelemesi için.
POST isteğinde gerekli alanlar eksik olduğunda 400 Bad Request.

401 Unauthorized:
Amaç: Kimlik doğrulamanın gerekli olduğunu ve başarısız olduğunu veya henüz sağlanmadığını belirtir.
Örnekler:
401 Eksik veya geçersiz kimlik doğrulama bilgileri için yetkisiz.
401 Geçerli kimlik bilgileri olmadan korunan kaynaklara erişirken yetkisiz.

403 Forbidden:
Amaç: Sunucunun isteği anladığını ancak yetkilendirmeyi reddettiğini belirtir.
Örnekler:
403 İstemcinin kaynağa erişim izninin olmadığı istekler için Yasak.
403 Forbidden, sunucu güvenlik nedeniyle isteği yerine getirmeyi reddettiğinde.

404 Not Found:
Amaç: Sunucunun istenen kaynağı bulamadığını belirtir.
Örnekler:
Var olmayan bir URL'ye erişirken 404 Not Found.
Taşınmış veya silinmiş kaynaklar için 404 Not Found.

5xx Server Hatası

500 Dahili Sunucu Hatası:
Amaç: Sunucunun, isteği yerine getirmesini engelleyen beklenmedik bir durumla karşılaştığını gösterir.
Örnekler:
Sunucu tarafı kod hataları nedeniyle 500 Dahili Sunucu Hatası.
Sunucu yapılandırmasında bir sorun olduğunda 500 Dahili Sunucu Hatası.

502 Bad Gateway:
Amaç: Sunucunun, isteği yerine getirmeye çalışırken eriştiği bir yukarı akış sunucusundan geçersiz bir yanıt aldığını gösterir.
Örnekler:
502 Bad Gateway bir ters proxy veya ağ geçidi sunucusu geçersiz bir yanıt aldığında.
502 Bad Gateway sunucular arasındaki ağ sorunları sırasında.

503 Service Unavailable:
Amaç: Sunucunun geçici aşırı yüklenme veya bakım nedeniyle şu anda isteği yerine getiremediğini gösterir.
Örnekler:
503 Service Unavailable sunucu bakımı sırasında.
503 Sunucu geçici olarak aşırı yüklendiğinde Hizmet Kullanılamıyor.

HTTP Request Examples
Burada, farklı yöntemleri ve kullanım durumlarını gösteren çeşitli HTTP istek örnekleri yer almaktadır:

GET Request:
GET /api/users?age=25 HTTP/1.1
Host: example.com
Accept: application/json

POST Request:
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer <token>

{
"name": "PwnLab",
"age": 3
}

PUT Request:
PUT /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer <token>

{
"name": "PwnLab",
"age": 3
}

DELETE Request:
DELETE /api/users/123 HTTP/1.1
Host: example.com
Authorization: Bearer <token>

PATCH Request:
PATCH /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer <token>

{
"age": 3
}

HTTP Response Örnekleri
Burada, çerezlerin ayarlanması ve dosya indirmeleri dahil olmak üzere farklı durum kodlarını, başlıkları ve senaryoları gösteren çeşitli HTTP yanıt örnekleri bulunmaktadır:

200 OK Set-Cookie ile Yanıt:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 123
Set-Cookie: sessionId=abc123; Path=/; HttpOnly
Date: Wed, 3 Nov 2024 22:00:00 GMT

{
"message": "Request was successful",
"data": {
"userId": 1,
"userName": "PwnLab
}
}

201 Created Response with Location Header:
HTTP/1.1 201 Created
Content-Type: application/json
Location: /api/users/123
Content-Length: 45
Date: Wed, 3 Nov 2024 22:00:00 GMT

{
"message": "User created successfully",
"userId": 123
}

204 No Content Response:
HTTP/1.1 204 No Content
Date: Wed, 3 Nov 2024 22:00:00 GMT

400 Bad Request Response:
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 55
Date: Wed, 3 Nov 2024 22:00:00 GMTMT

{
"error": "Invalid request",
"message": "The request body is missing required fields"
}

404 Not Found Response:
HTTP/1.1 404 Not Found
Content-Type: text/html
Content-Length: 150
Date: Wed, 3 Nov 2024 22:00:00 GMT

<!DOCTYPE html>
<html>
<head><title>404 Not Found</title></head>
<body>
<h1>404 Not Found</h1>
<p>The requested resource was not found on this server.</p>
</body>
</html>

200 OK Dosya İndirme ile Yanıt (Content-Disposition):
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="report.pdf"
Content-Length: 102400
Date: Wed, 3 Nov 2024 22:00:00 GMT

%PDF-1.4
% binary content of the PDF file...
 
Geri
Üst