HTTP چیست
جواب کوتاه
HTTP زبانی است که مرورگر با آن از سرور صفحه و فایل میخواهد. مرورگر یک درخواست میفرستد که میگوید چه میخواهد (مثلا GET و نشانی صفحه)، و سرور یک پاسخ برمیگرداند که بالایش یک کد وضعیت است: ۲۰۰ یعنی بفرمایید، ۳۰۱ یعنی جابهجا شده، ۴۰۴ یعنی پیدا نشد، و ۵۰۰ یعنی سرور خطا کرد. HTTP بیحافظه است و سایتها با کوکی شما را به یاد میآورند.
سه کلمه
- HTTPکوتاهشدهی Hypertext Transfer Protocol، یعنی «قاعدهی رساندن ابرمتن»: زبانی که مرورگر با آن از سرور صفحه میخواهد.
- درخواستپیامی که مرورگر میفرستد: چه میخواهد، از کدام نشانی، با چند سربرگ.
- پاسخپیامی که سرور برمیگرداند: یک کد وضعیت، چند سربرگ، و معمولا خود صفحه یا فایل.
پیشخوان داروخانه
فرض کنید به داروخانه میروید و نسخهای میدهید که رویش نوشته چه میخواهید. داروساز دارو را میآورد و همراهش یک یادداشت کوتاه است: «بفرمایید»، یا «این را نداریم»، یا «این دارو به داروخانهی دیگری رفته».
HTTP همین گفتوگوست، میان مرورگر شما و سرور یک سایت (درس سرور و کلاینت). مرورگر یک درخواست مینویسد و سرور یک پاسخ برمیگرداند. هر بار که صفحهای باز میکنید، مرورگر معمولا برای خود صفحه، عکسها و هر فایل دیگرش، درخواستهای جدا میفرستد:
این گفتوگو روی TCP، معمولا روی پورت ۸۰، انجام میشود (درس TCP و UDP). HTTP در لایهی کاربرد است، بالاتر از همهی چیزهایی که تا اینجا دیدید.
نسخهی درخواست از نزدیک
سطر اول هر درخواست سه بخش دارد، و بعد از آن سربرگها میآیند:
سربرگ Host لازم است، چون روی یک سرور ممکن است چند سایت باشد و سرور باید بداند کدام را میخواهید. سربرگهای دیگر چیزهایی مثل زبان دلخواه شما یا نوع مرورگر را میگویند. پاسخ هم همین شکل را دارد: سطر اول با نسخه و کد وضعیت، بعد سربرگها، بعد یک سطر خالی، و بعد خود محتوا.
GET و POST و بقیه
بخش اول درخواست، «روش» است: میگوید با آن نشانی چه کار دارید.
- GET: «این را بده». اصلیترین روش؛ هر بار که صفحهای باز میکنید، مرورگر GET میفرستد.
- POST: «این را بگیر و کارت را رویش بکن»؛ مثلا فیلدهای یک فرم که پر کردهاید، مثل نسخهای که همراهش مدرکی هم میدهید.
- HEAD: مثل GET، ولی فقط سربرگها را بفرست، نه خود محتوا را.
- PUT و DELETE: «این را اینجا بگذار» و «این را پاک کن»؛ بیشتر میان برنامهها به کار میروند.
یادداشت بالای جواب
هر پاسخ با یک کد وضعیت سهرقمی شروع میشود. لازم نیست همهی کدها را حفظ کنید؛ رقم اول دسته را میگوید، و فقط پنج دسته هست:
- 1xx: اطلاع«گرفتم، دارم ادامه میدهم»
- 2xx: موفق«بفرمایید»
- 3xx: جای دیگر«از جای دیگری بگیرید»
- 4xx: خطای درخواست«چیزی که خواستید درست نیست یا نیست»
- 5xx: خطای سرور«درخواست درست بود، ما از پسش برنیامدیم»
کدهایی که میبینید
| کد | نام | یعنی |
|---|---|---|
| 200 | OK | همهچیز درست؛ این هم صفحه |
| 301 | Moved Permanently | برای همیشه به نشانی دیگری رفته |
| 302 | Found | فعلا در نشانی دیگری است |
| 304 | Not Modified | عوض نشده؛ همانی که داری را نشان بده |
| 401 | Unauthorized | اول باید بگویی کیستی |
| 403 | Forbidden | اجازه نداری |
| 404 | Not Found | چنین چیزی اینجا نیست |
| 500 | Internal Server Error | سرور در کارش خطا کرد |
| 503 | Service Unavailable | سرور فعلا نمیتواند جواب بدهد |
۴۰۴ را احتمالا دیدهاید: صفحهای که دنبالش بودید، در آن نشانی نیست. ۳۰۱ را نمیبینید، چون مرورگر خودش شما را به نشانی تازه میبرد؛ ولی برای کسی که سایت دارد مهم است، چون میگوید از این به بعد هر جا به این صفحه اشاره میشود، باید نشانی تازه به کار برود.
داروسازی که یادش نمیماند
HTTP بیحافظه است: هر درخواست بهتنهایی فهمیده میشود، و سرور لازم نیست به یاد بیاورد درخواست قبلی از کی بوده. مثل داروسازی که هر نسخه را جدا میبیند و مشتریها را به خاطر نمیسپارد.
پس فروشگاه اینترنتی از کجا میداند سبد خرید شما چیست؟ با کوکی، که مثل کارت مشتری است:
کوکیها اینطور روی HTTPِ بیحافظه «نشست» میسازند. ولی از نظر امنیت و حریم خصوصی اشکالهایی هم دارند.
نسخههای HTTP
معنای HTTP، یعنی روشها و کدها و سربرگها، در همهی نسخهها یکی است؛ فرقشان در شکل فرستادن است. HTTP/1.1 پیامها را به شکل متن ساده میفرستد، همان که در تصویرها دیدید. HTTP/2 همان پیامها را فشردهتر و چندتا همزمان روی یک اتصال میفرستد. HTTP/3 روی QUIC و UDP است (درس TCP و UDP).
و HTTPS همان HTTP است، با رمزگذاری؛ درس بعد، «HTTPS و TLS»، دربارهی آن است.
سه اشتباه
- «خطای ۴۰۴ یعنی سرور خراب است.»۴۰۴ از دستهی ۴ است، یعنی چیزی که خواسته شده آنجا نیست؛ سرور سالم است و دارد همین را میگوید. خرابی سرور با ۵ شروع میشود.
- «سرور هر بار یادش میماند من کیستم.»HTTP بیحافظه است؛ اگر سایتی شما را میشناسد، از روی کوکیای است که مرورگرتان در هر درخواست نشان میدهد.
- «HTTP و HTML یکیاند.»HTML زبان نوشتن صفحه است و HTTP زبان رساندن آن؛ HTTP عکس و فایل و هر چیز دیگری را هم میرساند.
جمعبندی. آنچه از این درس با خودتان میبرید.
- HTTP زبان درخواست و پاسخ میان مرورگر و سرور است؛ در لایهی کاربرد.
- درخواست: روش (مثل GET)، نشانی، نسخه و سربرگها؛ پاسخ: کد وضعیت، سربرگها و خود محتوا.
- GET برای گرفتن، POST برای فرستادن دادهای مثل فرم.
- رقم اول کد: ۱ اطلاع، ۲ موفق، ۳ جای دیگر، ۴ خطای درخواست، ۵ خطای سرور.
- HTTP بیحافظه است؛ کوکی کارت مشتری است که مرورگر نگه میدارد.
- نسخهها: HTTP/1.1، HTTP/2 و HTTP/3 روی QUIC؛ معنا در همه یکی است.
خودتان را بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخر آزمون فقط کارنامه را میبینید: چند درست، چند نادرست.