diff --git a/docs/frontend/phase08-http.md b/docs/frontend/phase08-http.md new file mode 100644 index 00000000..a6954d39 --- /dev/null +++ b/docs/frontend/phase08-http.md @@ -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) +وظیفه توسعه و نظارت این پروتکل را بر عهده گرفت. + +
+ +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_)