Brauzerdə veb-saytın ünvanını yazıb Enter düyməsini sıxdıqda, saniyənin kiçik bir hissəsində şəbəkə qarşılıqlı əlaqələr zənciri işə düşür. PHP-də server tərəfi kodunu inamla yazmaq üçün istifadəçinin düyməni basması ilə ekranda hazır səhifənin görünməsi arasında nə baş verdiyini dərindən anlamaq vacibdir: brauzerin serveri necə tapdığını, HTTP sorğusunun necə formalaşdığını, veb-serverin icranı PHP-yə necə ötürdüyünü və cavabın hansı şəkildə geri qayıtdığını bilmək lazımdır.

«Klient — Server» arxitekturası

Müasir veb klient-server modeli üzərində qurulub. Bu modeldə iki əsas tərəf qarşılıqlı əlaqədə olur:

  1. Klient (Client) — resursları və ya məlumatları tələb edən tərəfdir. Əksər hallarda bu veb-brauzerdir (Google Chrome, Mozilla Firefox, Safari), mobil tətbiq və ya curl kimi konsol utilitidir.
  2. Server (Server) — şəbəkədə fasiləsiz işləyən, daxil olan şəbəkə bağlantılarını dinləyən və tələb olunan faylları, HTML səhifələrini və ya JSON məlumatlarını qaytaran kompüter və ya serverlər qrupudur.
text
+-------------------+           HTTP sorğusu (Request)         +-----------------------+
|      KLİENT       | ---------------------------------------> |      VEB-SERVER       |
| (Brauzer, Chrome) | <--------------------------------------- | (Nginx, Apache, PHP)  |
+-------------------+           HTTP cavabı (Response)         +-----------------------+

Klient həmişə dialoqun təşəbbüskarıdır. Server isə passiv şəkildə sorğuları gözləyir, onları HTTP protokolunun qaydalarına uyğun emal edir və nəticəni qaytarır.

URL daxil edilməsindən ekrana qədər olan yol

https://kurslar.prowid.com/courses ünvanına daxil olarkən addım-addım nə baş verdiyini nəzərdən keçirək:

MərhələProtokol / TexnologiyaNə baş verir
1. Adın təyini (DNS)DNS (Domain Name System)Brauzer domen adı ilə birbaşa əlaqə qura bilməz. O, serverin IP ünvanını (məsələn, 185.199.108.153) öyrənmək üçün DNS serverlərinə sorğu göndərir.
2. Bağlantının qurulmasıTCP / IPBrauzer üçmərhələli əl sıxma (TCP Handshake) vasitəsilə 80 (HTTP üçün) və ya 443 (HTTPS üçün) portu üzrə serverin IP ünvanı ilə şəbəkə soketi açır.
3. Kanalın qorunmasıTLS / HTTPSTəhlükəsiz bağlantı zamanı sertifikatlar mübadiləsi aparılır və şifrələmə üçün sessiya açarları razılaşdırılır.
4. Sorğunun göndərilməsiHTTP (1.1 / HTTP/2 / HTTP/3)Klient metod, yol və başlıqlardan ibarət mətn sorğusu formalaşdıraraq serverə göndərir.
5. Serverdə emalVeb-server + PHPServer sorğunu təhlil edir, HTML generasiya edən PHP skriptini işə salır və cavabı hazırlayır.
6. Qəbul və renderHTML, CSS, JS mühərrikiBrauzer cavab baytlarını qəbul edir, HTML-i oxuyur, CSS, şriftlər və skriptləri yükləyərək pikselləri ekrana çəkir.

💡 Terminalda domenin DNS qeydlərini nslookup və ya dig utilitləri ilə yoxlamaq olar: məsələn, nslookup kurslar.prowid.com.

HTTP sorğusunun və HTTP cavabının anatomiyası

HTTP (HyperText Transfer Protocol) — «sorğu — cavab» prinsipi ilə işləyən tətbiqi səviyyəli mətn protokoludur.

HTTP sorğusunun (Request) strukturu

Sorğu üç əsas hissədən ibarətdir:

  1. Başlanğıc sətri (Request Line): HTTP metodunu (GET, POST, PUT, DELETE və s.), tələb olunan yolu (/courses?cat=backend) və protokol versiyasını (HTTP/1.1) ehtiva edir.
  2. Başlıqlar (Headers): klient, qəbul edilən formatlar, cookie-lər və kodlaşdırmalar haqqında metadata ötürən «açar: dəyər» cütlükləridir.
  3. Sorğunun gövdəsi (Body): formalar və ya JSON göndərilərkən ötürülür (adətən POST, PUT, PATCH metodlarında), GET sorğularında gövdə olmur.

Xam HTTP sorğusu nümunəsi:

http
GET /courses?lang=az HTTP/1.1
Host: kurslar.prowid.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml
Accept-Language: az-AZ,az;q=0.9,en;q=0.8
Cookie: session_id=abc123xyz789
Connection: keep-alive

HTTP cavabının (Response) strukturu

Serverin cavabı da oxşar struktura malikdir:

  1. Status sətri (Status Line): protokol versiyası, üçrəqəmli cavab kodu və izahlı mətn (məsələn, HTTP/1.1 200 OK və ya 404 Not Found).
  2. Cavab başlıqları: məzmunun növü (Content-Type), uzunluğu (Content-Length), cookie təyini (Set-Cookie), tarix və server məlumatı.
  3. Cavabın gövdəsi: faydalı yük — HTML strukturu, JSON sənədi, şəkil və ya fayl.

Xam HTTP cavabı nümunəsi:

http
HTTP/1.1 200 OK
Date: Wed, 30 Sep 2026 07:00:00 GMT
Server: Apache/2.4.58
Content-Type: text/html; charset=UTF-8
Content-Length: 178
Set-Cookie: visited=1; Path=/; HttpOnly

<!DOCTYPE html>
<html lang="az">
<head><title>PHP Kursları</title></head>
<body>
  <h1>PHP kursuna xoş gəlmisiniz!</h1>
</body>
</html>

Əsas HTTP cavab kodları qrupu

DiapazonKateqoriyaNümunələr
2xxUğurlu (Success)200 OK, 201 Created, 204 No Content
3xxYönləndirmə (Redirection)301 Moved Permanently, 302 Found, 304 Not Modified
4xxKlient xətası (Client Error)400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found
5xxServer xətası (Server Error)500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable

Statik və dinamik səhifələr: PHP-nin rolu

Bütün veb-resurslar statik və dinamik olmaqla iki yerə bölünür:

  • Statik fayllar (.html, .css, .js, .png, .svg): serverin diskində hazır şəkildə saxlanılır. Veb-server (məsələn, Nginx) onları diskdən oxuyur və heç bir dəyişiklik etmədən birbaşa şəbəkəyə ötürür.
  • Dinamik səhifələr (.php): diskdə hazır HTML faylı olmaya da bilər. Bunun əvəzinə veb-server PHP interpretatorunu işə salır, ona sorğu məlumatlarını ötürür (URL parametrləri, forma məlumatları, cookie-lər), PHP məntiqi icra edir (məlumat bazasına müraciət edir, istifadəçi hüquqlarını yoxlayır, şablonları birləşdirir) və dərhal təzə HTML kodu generasiya edir.
text
[Brauzer]
   │
   │ 1. HTTP sorğusu (GET /profile.php)
   ▼
[Veb-server Nginx / Apache]
   │
   │ 2. .php faylını aşkarladı -> PHP-yə ötürür
   ▼
[PHP interpretatoru]
   │
   │ 3. Kodu icra edir, MySQL-dən oxuyur, HTML qurur
   ▼
[Generasiya olunmuş HTML]
   │
   │ 4. Content-Type: text/html başlığı ilə HTTP cavabı
   ▼
[Brauzer səhifəni ekranda göstərir]

Brauzer üçün statik fayl ilə PHP skriptinin nəticəsi arasında heç bir fərq yoxdur — hər iki halda o, standart HTML cavabını qəbul edir.

Praktika: cURL və DevTools vasitəsilə sorğuların təhlili

HTTP sorğularını əyani şəkildə görmək üçün iki sadə üsul mövcuddur.

Üsul 1: Konsol utiliti cURL

-i açarı curl proqramına cavab başlıqlarını gövdə ilə birlikdə göstərməyi tapşırır, -v (verbose) isə bağlantının qurulması prosesini tam nümayiş etdirir:

bash
curl -i https://httpbin.org/get
text
HTTP/1.1 200 OK
Date: Wed, 30 Sep 2026 07:15:00 GMT
Content-Type: application/json
Content-Length: 255
Connection: keep-alive
Server: gunicorn/19.9.0
Access-Control-Allow-Origin: *

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/8.4.0"
  }, 
  "origin": "94.20.18.12", 
  "url": "https://httpbin.org/get"
}

Üsul 2: Brauzerdə Network paneli

  1. Brauzerdə hər hansı veb-saytı açın.
  2. F12 (və ya Ctrl+Shift+I / Cmd+Opt+I) düyməsini basaraq Network (Şəbəkə) panelinə keçin.
  3. Səhifəni yeniləyin (F5 və ya Ctrl+R).
  4. Siyahıda bütün sorğular görünəcək: əsas sənəd, üslub cədvəlləri, skriptlər, şəkillər. Birinci sətrə (sənədə) klikləməklə sağ paneldə Headers (sorğu və cavab başlıqları), Payload (ötürülən parametrlər) və Response (qəbul edilən HTML kodu) məlumatlarını incələmək olar.

⚠️ Nəzərə alın: PHP yalnız server tərəfində (Server-Side) icra olunur. İstifadəçi brauzerdə heç vaxt ilkin PHP kodunu görmür, yalnız onun icra nəticəsini əldə edir.