Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ADD] http doc #168

Merged
merged 2 commits into from
Aug 10, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
257 changes: 257 additions & 0 deletions docs/frontend/phase08-http.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,257 @@
---
title: HTTP
description: How much do you like long text?
tags: [Readonly]
---

:::info این فاز، یکی از فازهای `Readonly` است.
:::

### مقدمه

در این فاز قصد داریم با پروتکل
HTTP
آشنا شویم.

- پروتکل
HTTP
چیست؟
- منظور از
Hyper Text
یا ابرمتن چیست؟
- روش‌های درخواست در پروتکل
HTTP
؟
- HTTP
چه چیزهایی را می‌تواند کنترل کند؟
- DNS
چیست؟
- چطور
DNS
کار می‌کند؟
- اجزای اصلی DNS

---

### یادگیری

#### پروتکل HTTP چیست؟

پروتکل‌های اینترنتی به عنوان مهم‌‌ترین و پرکاربردترین استاندارد برای تبادل اطلاعات در شبکه‌‌های اینترنتی شناخته می‌شوند.
پروتکل
HTTP
یا
Hyper Text Transfer Protocol
یکی از استانداردهای پرکاربرد تعریف شده برای شبکه‌های اینترنتی است
که مدتی بعد از ساخت اولین سایت‌ها ایجاد شد.
این استاندارد به تدریج توسعه پیدا کرد و کنسرسیوم جهانی وب
(W3C)
وظیفه توسعه و نظارت این پروتکل را بر عهده گرفت.

<br/>

Http
مخفف عبارت
Hyper Text Transfer Protocol
است
که به معنی پروتکلی برای انتقال ابرمتن‌ها می‌باشد.
بر اساس این پروتکل، امکان ایجاد صفحات وب و سایت‌های اینترنتی فراهم شد.
این پروتکل وظیفه برقراری ارتباط میان سرور و کلاینت را در یک شبکه کامپیوتری برعهده دارد.
به عبارتی دیگر این پروتکل مسئولیت برقراری ارتباط بین سرویس دهندگان و سرویس گیرندگان وب را برعهده دارد.

برای آشنایی بیشتر با این مفهوم می‌توانید از لینک‌های زیر استفاده کنید:

- [?Wiki - What is HTTP](https://en.wikipedia.org/wiki/HTTP)

---

#### منظور از Hyper Text یا ابرمتن چیست؟

شاید برای شما سوال شود، که منظور از کلمه
Hypertext
چیست؟
منظور از
Hypertext
یا ابر متن، متن‌های بزرگ و طولانی است که به صورت
HTML
نوشته می‌شوند.
البته برخلاف اینکه کدهای نوشته شده فقط به صورت متنی هستند،
بعد از پردازش توسط مرورگر کاربر الزاما به صورت متنی نخواهند بود.
یک سند
HTML
می‌تواند دارای تصویر، ویدئو، جدول ، لینک و... باشد.

---

#### روش‌های درخواست در پروتکل HTTP

پروتکل
Http
روش‌‌های مختلفی را برای درخواست اطلاعات در شبکه وب تعریف کرده‌ است.
هر کدام از این روش‌ها با هدف خاصی در وب سرورها استفاده می‌شوند.
در ادامه به توضیح هر کدام از این روش‌ها می‌پردازیم:

##### GET

پیام هایی که در این روش ارسال می‌شوند تنها شامل یک
URL
هستند.
البته در این پیام‌ها می‌توان تعدادی پارامتر دلخواه در انتهای
URL
اضافه کرد.
پارامترهای دلخواه در این پیام ها، در
URL
ارسال شده، به راحتی قابل مشاهده هستند.
این نوع پیام‌ها پس از ارسال توسط سرور پردازش می‌شوند و در نهایت نتیجه آن به درخواست کننده یا همان مرورگر بر می‌گردد.

##### POST

در این نوع پیام ها، پارامترهای دلخواهی که اضافه می‌شود، قابل مشاهده نمی‌باشند.
زیرا در این روش به جای اضافه کردن پارامترها در انتهای
URL
، آن‌ها در درون پیام درخواست شده قرار داده می‌شوند.

##### PUT

در این روش داده هایی به همراه پیام درخواست به سرور ارسال می‌شود.
سپس از سرور تقاضا می‌ شود که این داده‌ها را در آدرس مشخص شده ذخیره کند.
اگر در محلِ درخواست شده از قبل داده‌های دیگری ذخیره شده باشند، داده‌های جدید جایگزین خواهند شد.

##### PATCH

این روش در سال ۲۰۱۰ به پروتکل
http
اضافه شد.
این روش برای ایجاد تغییرات جزیی بر روی داده‌ها مورد نظر در سرور استفاده می‌ شود.

##### DELETE

از این روش برای حذف یک آدرس در سرور استفاده می‌شود.

برای آشنایی بیشتر با این مفهوم می‌توانید از لینک‌های زیر استفاده کنید:

- [MDN - HTTP request methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods)
- [MDN - HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)
- [Kode Kloud - PATCH vs PUT](https://kodekloud.com/blog/put-and-patch-in-rest-api/)

---

#### HTTP چه چیزهایی را می‌تواند کنترل کند؟

ماهیت بسط‌پذیر پروتکل
HTTP
در طی زمان به ما این امکان را داده است که کنترل و کارکردهای بیشتری روی وب داشته باشیم.
در ادامه فهرستی از قابلیت‌های متداولی را مشاهده می‌کنید که از سوی
HTTP
کنترل می‌شوند.

##### کش کردن

شیوه کش شدن سندها را می‌توان با استفاده از پروتکل
HTTP
کنترل کرد.
سرور می‌تواند به واسطه‌ها و کلاینت‌ها در مورد این که کش کردن چطور و برای چه مدتی انجام شود، دستورالعمل بدهد.
کلاینت می‌تواند به واسطه‌های بی‌د‌رنگ کش دستور دهد که سند ذخیره شده را نادیده بگیرند.

برای آشنایی بیشتر با این مفهوم می‌توانید از لینک‌های زیر استفاده کنید:

- [MDN - Cache-Control](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control)

##### Origin

مرورگرهای وب برای جلوگیری از سرقت اطلاعات و دیگر مداخلات در حریم خصوصی کاربران، یک جداسازی الزامی بین وب‌سایت‌ها ایجاد می‌کنند،
به این ترتیب تنها صفحه‌هایی با منشأ
(Origin)
یکسان می‌توانند به همه اطلاعات صفحه وب دسترسی داشته باشند.
با این که چنین قیدی یک مزاحمت برای سرور محسوب می‌شود، اما هدرهای
HTTP
می‌توانند این جداسازی صریح را در سمت سرور آزاد سازند
و به سند امکان دهند که مجموعه ای از اطلاعات باشد که از دامنه‌های مختلف تأمین می‌شوند.
حتی ممکن است برخی دلایل امنیتی برای انجام این کار وجود داشته باشد.

برای آشنایی بیشتر با این مفهوم می‌توانید از لینک‌های زیر استفاده کنید:

- [MDN - Origin](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin)
- [MDN - Same-origin policy](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy)
- [MDN - Cross-Origin Resource Sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)

##### احراز هویت (Authentication)

برخی صفحه‌های وب را می‌توان محافظت کرد، به طوری که تنها کاربران خاصی بتوانند به آن‌ها دسترسی داشته باشند.
فرایند ابتدایی احراز هویت می‌تواند از سوی
HTTP
ارائه شود،
که این کار یا از طریق
WWW-Authenticate
و هدرهای مشابه یا با تعیین یک نشست خاص با استفاده از کوکی‌های
HTTP
انجام می‌یابد.

برای آشنایی بیشتر با این مفهوم می‌توانید از لینک‌های زیر استفاده کنید:

- [MDN - HTTP authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication)

##### نشست‌ها (Sessions)

استفاده از کوکی‌های
HTTP
به شما امکان می‌دهد که درخواست‌های
HTTP
را به state سرور پیوند دهید.
با این کار نشست‌ها ایجاد می‌شوند، هر چند که
HTTP
ابتدایی یک پروتکل
stateless
است.
این وضعیت نه تنها برای مدیریت سبد خرید فروشگاه‌های آنلاین مفید است،
بلکه برای هر سایتی که امکان پیکربندی خروجی خود را به کاربر می‌دهد، مفید خواهد بود.

برای آشنایی بیشتر با این مفهوم می‌توانید از لینک‌های زیر استفاده کنید:

- [MDN - A typical HTTP session](https://developer.mozilla.org/en-US/docs/Web/HTTP/Session)

---

#### DNS چیست؟

DNS (Domain Name System) یک سیستم است که نام دامنه‌های قابل خواندن توسط انسان (مثل `www.example.com`) را به آدرس‌های IP قابل فهم برای کامپیوترها (مثل `192.0.2.1`) تبدیل می‌کند. این فرآیند شبیه به دفترچه تلفن است که در آن نام افراد به شماره تلفن‌هایشان تبدیل می‌شود.

#### چرا DNS مهم است؟

DNS
به شما اجازه می‌دهد که به جای وارد کردن یک رشته عددی پیچیده (آدرس
IP
)، با وارد کردن یک نام دامنه به وبسایت‌ها دسترسی پیدا کنید. این سیستم استفاده از اینترنت را بسیار ساده‌تر و کاربرپسندتر می‌کند.

#### چطور DNS کار می‌کند؟

1. **درخواست کاربر:** وقتی شما نام دامنه‌ای را در مرورگر وب خود وارد می‌کنید (مثل `www.example.com`)، مرورگر شما درخواست خود را به یک سرور
DNS
ارسال می‌کند.

2. **جستجوی سرور DNS:** سرور
DNS
به دنبال آدرس
IP
مرتبط با آن نام دامنه می‌گردد. اگر این اطلاعات را در حافظه خود داشته باشد، سریعاً آدرس
IP
را برمی‌گرداند. اگر نه، درخواست را به سرور
DNS
دیگری ارسال می‌کند.

3. **برگرداندن آدرس IP:** وقتی که آدرس
IP
پیدا شد، به مرورگر شما بازگردانده می‌شود.

4. **اتصال به وبسایت:** مرورگر شما با استفاده از آدرس
IP
دریافتی، به سرور وبسایت متصل می‌شود و صفحه وب مورد نظر را بارگذاری می‌کند.

با این توضیحات، حالا باید بهتر بفهمید که
DNS
چیست و چگونه کار می‌کند.
اگر سوالات بیشتری دارید، منابع آنلاین زیادی برای یادگیری عمیق‌تر موجود است که چندتا از آنها را در لینک های زیر برایتان قرار داده ایم:

- [?Cloudflare - What is DNS](https://www.cloudflare.com/learning/dns/what-is-dns/)
- [AWS - Introduction to DNS](https://aws.amazon.com/route53/what-is-dns/)
- [Youtube - DNS explained in 100 seconds](https://youtu.be/UVR9lhUGAyU?si=1O521uCkTLqSF9i_)
Loading