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:
- 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
curlkimi konsol utilitidir. - 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.
+-------------------+ 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 / Texnologiya | Nə 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 / IP | Brauzer üç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 / HTTPS | Tə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əsi | HTTP (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ə emal | Veb-server + PHP | Server sorğunu təhlil edir, HTML generasiya edən PHP skriptini işə salır və cavabı hazırlayır. |
| 6. Qəbul və render | HTML, CSS, JS mühərriki | Brauzer 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
nslookupvə yadigutilitlə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:
- Başlanğıc sətri (Request Line): HTTP metodunu (
GET,POST,PUT,DELETEvə s.), tələb olunan yolu (/courses?cat=backend) və protokol versiyasını (HTTP/1.1) ehtiva edir. - 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.
- Sorğunun gövdəsi (Body): formalar və ya JSON göndərilərkən ötürülür (adətən
POST,PUT,PATCHmetodlarında),GETsorğularında gövdə olmur.
Xam HTTP sorğusu nümunəsi:
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-aliveHTTP cavabının (Response) strukturu
Serverin cavabı da oxşar struktura malikdir:
- Status sətri (Status Line): protokol versiyası, üçrəqəmli cavab kodu və izahlı mətn (məsələn,
HTTP/1.1 200 OKvə ya404 Not Found). - Cavab başlıqları: məzmunun növü (
Content-Type), uzunluğu (Content-Length), cookie təyini (Set-Cookie), tarix və server məlumatı. - 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/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
| Diapazon | Kateqoriya | Nümunələr |
|---|---|---|
| 2xx | Uğurlu (Success) | 200 OK, 201 Created, 204 No Content |
| 3xx | Yönləndirmə (Redirection) | 301 Moved Permanently, 302 Found, 304 Not Modified |
| 4xx | Klient xətası (Client Error) | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found |
| 5xx | Server 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.
[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:
curl -i https://httpbin.org/getHTTP/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
- Brauzerdə hər hansı veb-saytı açın.
F12(və yaCtrl+Shift+I/Cmd+Opt+I) düyməsini basaraq Network (Şəbəkə) panelinə keçin.- Səhifəni yeniləyin (
F5və yaCtrl+R). - 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.