15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
31.10.2024

Linux’ta HTTP İsteklerini Anlamak: Yapı, Yöntemler ve Pratik Örnekler

HTTP (Hypertext Transfer Protocol), modern web’in temel iletişim katmanıdır. Bir tarayıcı bir sayfayı her yüklediğinde, bir API çağrısı yapıldığında veya bir sunucu uzak bir kaynağı getirdiğinde, o etkileşimin merkezinde bir HTTP isteği vardır. Linux sistem yöneticileri, geliştiriciler ve DevOps mühendisleri için HTTP isteklerinin nasıl yapılandırıldığını, hangi yöntemlerin kullanılacağını ve komut satırından nasıl oluşturulacağını veya analiz edileceğini derinlemesine anlamak sadece yararlı değil — gereklidir.

Bu kapsamlı rehber, bir HTTP isteğinin anatomisini açıklar, gerçek dünya örnekleriyle her ana HTTP yöntemini açıklar ve HTTP trafiğini göndermek, hata ayıklamak ve analiz etmek için mevcut olan en güçlü Linux araçlarında size rehberlik eder. VPS Hosting ortamını yönetin, web uygulamalarını adanmış bir sunucuda çalıştırın veya web iletişiminin temellerini öğreniyorsanız, bu makale teknik temellerinizi keskinleştirecektir.

HTTP İsteği Nedir?

Bir HTTP isteği, bir istemci (web tarayıcısı, mobil uygulama veya komut satırı aracı gibi) tarafından bir sunucuya gönderilen ve sunucudan bir kaynak üzerinde belirli bir işlem gerçekleştirmesini isteyen bir mesajdır. Sunucu daha sonra isteği işler ve bir HTTP yanıtı döndürür.

Bu istemci-sunucu değişimi HTTP spesifikasyonu tarafından yönetilir; şu anda en yaygın olarak HTTP/1.1 ve HTTP/2 olarak dağıtılmakta, HTTP/3 (QUIC tabanlı) hızla benimsenmektedir.

HTTP İsteğinin Anatomisi

Her HTTP isteği üç ana bölümden oluşur: istek satırı, başlıklar ve isteğe bağlı ileti gövdesi. Her bileşeni anlamak, sorunları hata ayıklamak, API’ler oluşturmak ve web sunucularını doğru şekilde yapılandırmak için kritiktir.

1. İstek Satırı

İstek satırı her zaman bir HTTP isteğinin ilk satırıdır. Boşluklarla ayrılmış üç öğe içerir:

  • HTTP Yöntemi — gerçekleştirilecek işlem (örn., GET, POST, PUT)
  • İstek-URI — hedef kaynağın yolu (örn., /api/users veya /index.html)
  • HTTP Sürümü — kullanılan protokol sürümü (örn., HTTP/1.1)

Örnek:

GET /api/users HTTP/1.1

2. İstek Başlıkları

Başlıklar istek hakkında meta veriler taşır. Sunucuya istemcinin yetenekleri, gönderilen verilerin biçimi, kimlik doğrulama kimlik bilgileri, önbelleğe alma tercihleri ve çok daha fazlası hakkında bilgi verirler. Her başlık, iki nokta ile ayrılmış bir anahtar-değer çiftidir.

Yaygın başlıklar ve amaçları:

BaşlıkAmaç
HostSunucunun alan adını belirtir
User-Agentİsteği yapan istemci yazılımını tanımlar
Acceptİstemcinin işleyebileceği içerik türlerini söyler
Content-Typeİstek gövdesinin biçimini açıklar
Content-Lengthİstek gövdesinin bayt cinsinden boyutunu gösterir
AuthorizationKimlik doğrulama kimlik bilgilerini taşır
Accept-Encodingİstemcinin desteklediği sıkıştırma algoritmalarını listeler
Connectionİstekten sonra bağlantının açık kalıp kalmayacağını kontrol eder

Örnek başlıklar:

Host: api.example.com
User-Agent: Mozilla/5.0
Accept: application/json
Content-Type: application/json
Authorization: Bearer token123

3. İstek Gövdesi

Tüm HTTP istekleri bir gövde içermez. GET ve HEAD gibi yöntemler tipik olarak bir gövde taşımaz. POST, PUT ve PATCH gibi yöntemler, sunucuya veri iletmek için gövdeyi kullanır — örneğin, form gönderileri, JSON yükleri veya dosya yüklemeleri.

Tam HTTP İsteği Örneği

Aşağıda, JSON kimlik bilgilerini kabul eden bir giriş uç noktası için tam, gerçekçi bir HTTP isteği verilmiştir:

POST /api/login HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 47
{
"username": "john",
"password": "secret123"
}

Bunu parçalayarak:

  • POST /api/login HTTP/1.1 — istek satırı
  • Anahtar-değer çiftlerinin bloğu — istek başlıkları
  • Alttaki JSON nesnesi — istek gövdesi

HTTP Yöntemleri Açıklandı

HTTP, tanımlanan kaynak üzerinde gerçekleştirilecek istenen işlemi gösteren bir istek yöntemleri (HTTP fiilleri olarak da adlandırılır) seti tanımlar. Her yöntemin belirli semantikleri, güvenlik garantileri ve idempotency özellikleri vardır ve API’ler tasarlarken veya tüketirken bunları anlamalısınız.

GET — Bir Kaynağı Alın

Amaç: Sunucudan veri getirin ve değiştirmeyin.

Özellikler:

  • Güvenli — sunucu durumunu değiştirmez
  • İdempotent — birden çok kez çağrılması aynı sonucu üretir
  • Parametreler URL sorgu dizesi aracılığıyla iletilir
  • Asla hassas veri göndermek için kullanılmamalıdır

Örnek:

GET /api/users?id=123 HTTP/1.1
Host: api.example.com

Kullanım durumları: Web sayfalarını yükleme, API verilerini getirme, dosyaları alma.

POST — Sunucuya Veri Gönderin

Amaç: Sunucuya veri gönderin ve yeni bir kaynak oluşturun veya bir işlemi tetikleyin.

Özellikler:

  • İdempotent değil — aynı isteği iki kez göndermek yinelenen kayıtlar oluşturabilir
  • Veriler istek gövdesinde gönderilir
  • Yaygın olarak form gönderileri ve API kaynak oluşturma için kullanılır

Örnek:

POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com"
}

Kullanım durumları: Kullanıcı kaydı, giriş formları, kayıt oluşturma, dosya yüklemeleri.

PUT — Bir Kaynağı Değiştirin veya Oluşturun

Amaç: Mevcut bir kaynağı tamamen değiştirin veya belirtilen URI’de yoksa oluşturun.

Özellikler:

  • İdempotent — aynı PUT isteğini birden çok kez göndermek her zaman aynı kaynak durumuna neden olur
  • Tüm kaynağı değiştirir (PATCH’in aksine, kısmi)

Örnek:

PUT /api/users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"name": "Jane Doe",
"email": "jane@example.com"
}

Kullanım durumları: Kullanıcı profilini güncelleme, API aracılığıyla yapılandırma dosyasını değiştirme.

DELETE — Bir Kaynağı Kaldırın

Amaç: Belirtilen kaynağı sunucudan silin.

Özellikler:

  • İdempotent — artık var olmayan bir kaynağı silmek yine de başarılı (veya 404) yanıtı döndürür ve ek yan etkiler olmaz
  • Tipik olarak istek gövdesi taşımaz

Örnek:

DELETE /api/users/123 HTTP/1.1
Host: api.example.com

Kullanım durumları: Kullanıcı hesaplarını kaldırma, kayıtları silme, kaynakları temizleme.

PATCH — Bir Kaynağı Kısmen Güncelleyin

Amaç: Mevcut bir kaynağa kısmi değişiklikler uygulayın ve yalnızca belirtilen alanları güncelleyin.

Özellikler:

  • Mutlaka idempotent değil — uygulamaya bağlı olarak, tekrarlanan çağrılar farklı etkilere sahip olabilir
  • Küçük güncellemeler için PUT’tan daha bant genişliği verimli

Örnek:

PATCH /api/users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"email": "newemail@example.com"
}

Kullanım durumları: Tek bir alanı güncelleme (örn., e-posta adresi), durum bayrağını değiştirme.

Diğer Önemli HTTP Yöntemleri

YöntemAmaç
HEADGET ile aynı ancak yalnızca başlıkları döndürür, gövde yok — kaynak varlığını veya meta verileri kontrol etmek için yararlı
OPTIONSSunucu tarafından belirli bir URL için desteklenen HTTP yöntemlerini döndürür — CORS ön kontrol isteklerinde kullanılır
CONNECTSunucuya bir tünel kurar (proxy’ler aracılığıyla HTTPS için kullanılır)
TRACEAlınan isteği istemciye geri yansıtır — esas olarak tanılama amaçları için

Linux’ta HTTP İstekleri Yapma: Araçlar ve Örnekler

Linux, HTTP, HTTPS, FTP ve düzinelerce diğer protokol üzerinden veri aktarımı için komut satırı araçlarının zengin bir ekosistemini sunmaktadır. İşte her yönetici ve geliştirici tarafından bilinmesi gereken en önemlileri.

1. curl — HTTP’nin İsviçre Çakısı

curl, HTTP, HTTPS, FTP ve diğer birçok protokol üzerinden veri aktarımı için en yaygın olarak kullanılan komut satırı aracıdır. Neredeyse her Linux dağıtımında önceden yüklüdür ve API testi, betik yazma ve otomasyon için vazgeçilmezdir.

Temel GET isteği:

curl https://api.example.com/users

Ayrıntılı çıktı ile GET isteği (başlıkları gösterir):

curl -v https://api.example.com/users

JSON gövdesi ile POST isteği:

curl -X POST https://api.example.com/users
-H "Content-Type: application/json"
-d '{"name":"John","email":"john@example.com"}'

Kaynağı güncellemek için PUT isteği:

curl -X PUT https://api.example.com/users/123
-H "Content-Type: application/json"
-d '{"name":"Jane"}'

DELETE isteği:

curl -X DELETE https://api.example.com/users/123

PATCH isteği:

curl -X PATCH https://api.example.com/users/123
-H "Content-Type: application/json"
-d '{"email":"newemail@example.com"}'

Yanıtı bir dosyaya kaydedin:

curl https://api.example.com/users -o response.json

Yönlendirmeleri otomatik olarak takip edin:

curl -L https://example.com

Bilmeniz gereken temel curl bayrakları:

BayrakAçıklama
-XHTTP yöntemini belirtir
-Hİstek başlığı ekler
-dİstek gövdesinde veri gönderir
-oÇıktıyı bir dosyaya kaydeder
-vAyrıntılı modu etkinleştirir (tam istek/yanıtı gösterir)
-IYalnızca başlıkları getirir (HEAD isteği)
-LHTTP yönlendirmelerini takip eder
-uTemel kimlik doğrulama için kullanıcı adı ve şifre sağlar
-kSSL sertifikası doğrulamasını atlar (yalnızca test için kullanın)

2. wget — Dosya ve Sayfaları İndirme

wget, öncelikle dosyaları indirmek ve web sitelerini yansıtmak için tasarlanmıştır. API çalışması için curl kadar çok yönlü olmasa da, özyinelemeli indirmeler ve kesintiye uğrayan aktarımları sürdürmede mükemmeldir.

Dosya indirin:

wget https://example.com/file.zip

Kesintiye uğrayan bir indirmeyi sürdürün:

wget -c https://example.com/largefile.iso

Dosyayı arka planda indirin:

wget -b https://example.com/file.zip

Tüm bir web sitesini yansıtın:

wget -m https://example.com

wget ile POST isteği gönderin:

wget --post-data='username=john&password=secret' https://example.com/login

3. HTTPie — İnsan Dostu HTTP İstemcisi

HTTPie, API’lerle etkileşimi mümkün olduğunca sezgisel hale getirmek için tasarlanmış modern, kullanıcı dostu bir komut satırı HTTP istemcisidir. Temiz söz dizimi ve renklendirilmiş, biçimlendirilmiş çıktısı geliştiriciler arasında favoridir.

HTTPie’yi yükleyin:

pip install httpie

GET isteği:

http https://api.example.com/users

JSON ile POST isteği (otomatik içerik türü algılaması):

http POST https://api.example.com/users name=John email=john@example.com

Kimlik doğrulama ile PUT isteği:

http PUT https://api.example.com/users/123 -a username:password name=Jane

DELETE isteği:

http DELETE https://api.example.com/users/123

HTTPie, JSON yanıtlarını söz dizimi vurgulaması ile otomatik olarak biçimlendirir; bu, ham curl çıktısına kıyasla API yanıtlarını okumayı çok daha kolay hale getirir.

4. Telnet — Öğrenme için Ham HTTP İstekleri

Üretim kullanımı için pratik olmasa da, Telnet, bir HTTP isteğinin ham TCP seviyesinde tam olarak neye benzediğini anlamak için mükemmel bir eğitim aracıdır. Doğrudan 80 numaralı porta bağlanır ve HTTP isteklerini manuel olarak yazmanıza izin verir.

Bir sunucuya bağlanın:

telnet example.com 80

Daha sonra aşağıdaki isteği yazın (son satırdan sonra iki kez Enter tuşuna basın):

GET / HTTP/1.1
Host: example.com
Connection: close

Sunucunun tam olarak gönderdiği gibi durum satırı, başlıklar ve gövde dahil olmak üzere ham HTTP yanıtını göreceksiniz. Bu alıştırma, protokolü temel düzeyde anlamak için çok değerlidir.

> Not: HTTPS bağlantıları için, TLS şifrelemesini işleyemediği için telnet yerine openssl kullanın.

OpenSSL kullanarak ham HTTPS isteği:

openssl s_client -connect example.com:443

Daha sonra yazın:

GET / HTTP/1.1
Host: example.com
Connection: close

5. Python — HTTP İsteklerini Betik Yazma

Otomasyon ve betik yazma için Python’un requests kütüphanesi, Linux’ta HTTP isteklerini programlı olarak yapmanın en popüler araçlarından biridir.

requests kütüphanesini yükleyin:

pip install requests

GET isteği:

import requests
response = requests.get('https://api.example.com/users')
print(response.json())

POST isteği:

import requests
data = {'name': 'John', 'email': 'john@example.com'}
response = requests.post('https://api.example.com/users', json=data)
print(response.status_code)

Linux’ta HTTP Trafiğini Analiz Etme

İstekler yapmanın ötesinde, Linux, HTTP trafiğini yakalama ve analiz etme için güçlü araçlar sağlar — hata ayıklama, performans ayarı ve güvenlik analizi için gerekli beceriler.

tcpdump — Ağ Paketlerini Yakala

tcpdump, ham ağ trafiğini yakalayan bir komut satırı paket analizidir. Neredeyse her Linux sisteminde mevcuttur ve root veya sudo ayrıcalıkları gerektirir.

Tüm HTTP ve HTTPS trafiğini yakala:

sudo tcpdump -i any 'tcp port 80 or tcp port 443'

Belirli bir arayüzde trafiği yakala ve bir dosyaya kaydet:

sudo tcpdump -i eth0 -w capture.pcap

Kaydedilmiş bir yakalama dosyasını oku:

tcpdump -r capture.pcap

Trafiği ana bilgisayara göre filtrele:

sudo tcpdump -i any host 192.168.1.100

Wireshark — GUI Paket Analizi

Wireshark, endüstri standardı grafik paket analizidir. Linux sunucunuzda tcpdump kullanarak trafiği yakalayabilir ve bunu bir .pcap dosyasına kaydedebilir, ardından iş istasyonunuzda Wireshark’ta açabilirsiniz.

Wireshark şunları yapmanıza izin verir:

  • Tam HTTP konuşmalarını yeniden oluştur
  • Trafiği protokol, IP, port veya içeriğe göre filtrele
  • Performans darboğazlarını ve hatalarını tanımla
  • Şüpheli veya kötü amaçlı trafik modellerini algıla

ngrep — Ağ Grep

ngrep, tcpdump’ın gücünü grep tarzı desen eşleştirmesiyle birleştirir; bu, ağ trafiğinde belirli dizeleri aramayı kolaylaştırır.

HTTP GET isteklerini ara:

sudo ngrep -l 'GET' 'tcp port 80'

Trafikteki belirli bir ana bilgisayarı ara:

sudo ngrep 'example.com' 'tcp port 80'

HTTP Durum Kodları: Sunucu Yanıtlarını Anlama

Sunucu HTTP isteğinizi aldığında, isteğin başarılı olup olmadığını, başarısız olup olmadığını veya daha fazla işlem gerektirip gerektirmediğini söyleyen bir durum kodu ile yanıt verir. Bu kodları anlamak hata ayıklama için gereklidir.

Kod AralığıKategoriYaygın Örnekler
1xxBilgilendirme100 Continue, 101 Switching Protocols
2xxBaşarı200 OK, 201 Created, 204 No Content
3xxYönlendirme301 Moved Permanently, 302 Found, 304 Not Modified
4xxİstemci Hatası400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found
5xxSunucu Hatası500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable

HTTP İsteklerini Güvence Altına Alma: HTTPS ve SSL/TLS

Üretim ortamlarında, tüm HTTP trafiği HTTPS (TLS/SSL üzerinden HTTP) kullanılarak şifrelenmelidir. Kimlik bilgileri, API belirteçleri veya herhangi bir hassas veriyi düz HTTP üzerinden göndermek, ağ yolundaki herkes tarafından kesintiye uğrama risk

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın