عضویت در خبرنامه

با عضویت در خبرنامه از آخرین مقالات اطلس ساختار داده باخبر شوید

عضویت
arrow_backward بازگشت

HTTP چیست؟

در این مقاله بهتون میگم که world wide web یا همون چیزی که به نام شبکه اینترنت میشناسیم چطوری کار میکنه.

وقتی شما در حال وب گردی و دیدن وب سایت های مختلف هستید، در حقیقت در حال استفاده از تکنولوژی بنیادی Hypertext Transfer Protocol یا به اختصار HTTP هستید.

وقتی از یک وب سایت دیدن میکنید، مرورگر (browser) شما یک درخواست (request) به سرور مقصد با استفاده از پروتکل HTTP ارسال میکند. سپس سرور درخواست را با یک پاسخ (response) که حاوی منابع درخواستی شما (که ممکن است یک عکس، ویدئو و یا صفحه HTML باشد) است برایتان میفرستد و مرورگر آن را به شما نمایش می دهد.

این سناریو یک مدل پیغام دهی بر اساس HTTP است. هر ارتباط بر اساس HTTP شمل یک درخواست (request) و یک پاسخ (response) است.

پروتکل HTTP ذاتا stateless است.

Stateless بودن این پروتکل به این معناست که هر درخواست از درخواست دیگر مستقل است. بنابراین هر درخواستی که از طرف شما به سرور ارسال می شود باید حاوی تمامی اطلاعات لازم برای کامل بودن درخواست باشد. و دیگر معنی stateless بودن یعنی هر ارتباطی بر اساس پروتکل HTTP باید از سایر ارتباطات مستقل و مجزا باشد.

URLs

URL یا همان Uniform Resource Locator احتمالا شناخته شده ترین مفهوم در وب است. همچنین مهمترین و سودمند ترین مفهوم. یک URL آدرسی است که مکان منبع (resource) درخواستی شما در وب را مشخص میکند.

ایده وب برگرفته از شبکه ای از منابع متمایز است. از زمان پیدایش، وب پلتفرمی بوده برای اشتراک گذاری فایل های تکست، HTML، اسناد، تصاویر و غیره. بنابراین وب را میتوان مجموعه ای از این منابع در نظر گرفت.

شکل بالا یک URL را نشان میدهد.
 

پروتکل (Protocol): بیشتر اوقات HTTP است (میتواند HTTPS نیز باشد که نسخه ایمن HTTP است که در همین مقاله به این نسخه هم می پردازیم).

دیگر پروتکل های متداول عبارتند از:

• File Transfer Protocol یا همان FTP: پروتکل استاندارد برای انتقال فایل میان کاربر و سرور در شبکه.

• Simple Mail Transfer Protocol یا SMTP: استانداردی برای انتقال ایمیل

دامین (Domain): اسمی که نشانگر IP یک یا چند منبع (resource) در اینترنت است.

مسیر (Path): نشان دهنده محل منابع بر روی سرور است. مسیر از همان منطقی استفاده میکند که گوشی موبایل و یا کامپیوتر شما برای شناسایی منابع خود استفاده میکند (مانند:  C:/my cars/VWBeetle.pdf)

پارامترها (Parameters): اطلاعات اضافه برای شناسایی و یا فیلتر اطلاعات بر روی سرور.

نکته: وقتی مقالات مختلف در مورد HTTP مطالعه میکنید ممکن است با عبارت URI (Uniform Resource Identifier) مواجه شوید. در حقیقت URI همان URL است اما در منابع رسمی و آکادمیک.

درخواست (HTTP Request)

در پروتکل HTTP، هر درخواستی باید حاوی آدرس URL باشد. ضمنا درخواست باید حاوی یک متد (method) باشد. چهار متد اصلی HTTP عبارتند از:

• GET

• PUT

• POST

• DELETE

در قسمت متد های HTTP در همین مقاله، این متد ها را شرح میدهم.

این متدها با اعمال زیر هم ارز هستند:

• Read

• Update

• Create

• Delete

همه پیام های HTTP دارای یک و یا چند header است که به دنبال آن در صورت نیاز یک body در پیام قرار میگیرد. Body حاوی اطلاعاتی است که به همراه درخواست (request) و یا پاسخ (response) ارسال می شود.

اولین قسمت هر درخواست HTTP دارای 3 آیتم است؛

مثلا:

GET /adds/search-result?item=vw+beetle HTTP/1.1

(وقتی یک URL حاوی کاراکتر "?" است یعنی شامل یک query است و این بدین معنی است که پارامتری جهت انتخاب منابع درخواست شده ارسال شده است.)

1. پارامتر اول نشانگر متد مورد استفاده درخواست HTTP است. متداول ترین متد مورد استفاده GET می باشد. متد GET برای درخواست یک منبع (resource) از سرور بکار می رود و از آنجایی که GET هیچ body ندارد بنابراین در درخواست های مبتنی بر این متد فقط و فقط header مورد نیاز است.

2. قسمت دوم URL مقصد است.

3. قسمت سوم نسخه استفاده شده HTTP است. فعلا نسخه 1.1متداول ترین نسخه است اما نسخه 2 هم در حال گسترش است.

چند تا مورد قابل توجه دیگر هم در یک درخواست HTTP وجود دارد:

Referer header – حاوی آدرس URL مبدا است.

User-Agent header – حاوی اطلاعات تکمیلی درباره مرورگر مورد استفاده است.

Host header – حاوی نام میزبان است. این هدر وقتی ضروری است که بر روی یک سرور چندین پیج قرار داشته باشد.

Cookie header – حاوی چند پارامتر اضافی دیگر است که سرور روی مرورگر ذخیره می کند و با هر درخواست به سرور ارسال می گردد.

 

 پاسخ (HTTP Response)

دقیقا همانند درخواست، پاسخ HTTP نیز شامل 3 بخش است؛

مثلا:

HTTP/1.1 200 OK

1. قسمت اول نسخه HTTP مورد استفاده است.

2. قسمت دوم کد عددی status code نتیجه درخواست است.

3. قسمت سوم توضیح در مورد کد قسمت دوم است.

در پاسخ HTTP هم چند مورد قابل توجه وجود دارد:

Server-header – حاوی اطلاعاتی در مورد مشخصات سرور مورد استفاده است.

Set-Cookie header – مشخص کننده کوکی به مرورگر است.

Message body – حاوی بدنه پیام (message body) برای ارسال به مرورگر است.

Content-Length header – مشخص کننده اندازه بدنه پیام بر حسب بایت است.

متدها (HTTP Methods)

متدهای متداول عبارتند از GET و POST. اما چند متد دیگر نیز وجود دارد.

GET – وقتی که درخواست یک منبع (resource) از سروری دارید و درخواست شما شامل هیج تغییری در منبع (resource) نیست از این متد استفاده می کنید. متد GET هیچ تغییری در حالت منبع (resource) ایجاد نمیکند.

POST – وقتی میخواهید اطلاعاتی برای ایجاد یک منبع (resource) به سرور بفرستید از این متد استفاده می کنید.

PUT – وقتی که میخواهید منبع (resource) موجود در سرور را با استفاده از محتوایی آپدیت کنید از این متد استفاده می کنید. این متد را نوعی ویرایش محسوب کنید.

HEAD – مورد استفاده این متد مانند متد GET است با این تفاوت که پاسخی که با این متد دریافت میکنید نباید حاوی body باشد. اما هدر های پاسخ همان هدرهایی است که با متد GET دریافت میکنید. زمانی از متد HEAD استفاده می شود که بخواهید چک کنید آیا منبع (Resource) مورد نیازتان در سرور موجود است یا نه و پس از گرفتن جواب مثبت از متد GET استفاده میکنید.

TRACE – از این متد برای اهداف تشخیصی (diagnostic) استفاده میکنید. بدنه پاسخ (response body) که دریافت میکنید همان پیام درخواست است.

OPTIONS – از این متد برای مشخص کردن متدهای قابل استفاده در ارتباطات با سرور مورد نظر استفاده می شود.

PATCH – از این متد زمانی که میخواهید تغییرات موردی در منبع (resource) ایجاد کنید استفاده میکنید.

DELETE – از این متد برای حذف یک منبع (resource) مشخص استفاده میکنید.

REST

Representational state transfer (REST) یک آرایش معماری است که درخواست ها (requests) و پاسخ ها (responses) نمایانگر حالت فعلی منابع سیستم است. (میدونم ترجمه ش فارسی سخت شد ولی واقعا از این بهتر بلد نبودم!)

برای مثال به تفاوت میان این دو URL دقت کنید:

• حالت معمولی:

http://carapp.com/search?make=wv&model=beetle

• حالت REST :

http://carapp.com/search/vw/beetle

برای اطلاعات بیشتر در مورد معماری REST به این مقاله رجوع کنید.

 

HTTP Headers

در ساختار مبتنی بر request/response ، هر پیام حاوی 3 قسمت است:

• خط اول (First line)

• هدر ها (Headers)

• بدنه (Body/Content)

در قسمت هایی قبلی در مورد "خط اول" و "بدنه پیام" توضیح دادیم. حالا زمان اونه که به HTTP headers بپردازیم.

Header ها در پیام، پس از خط اول قرار میگیرند و بصورت "اسم:مقدار" درج می شوند. Headers برای ارسال اطلاعات اضافی همراه با درخواست یا پاسخ بکار می روند. 

چندین نوع هدر مختلف وجود دارد، میتوان هدر ها را در 4 دسته طبقه بندی کرد:

هدر عمومی (General header) – هدر هایی که هم در درخواست و هم پاسخ میتوانند استفاده شوند و از پیامی که منتقل می شود مستقل هستند.

هدر درخواست (Request header) – این هدر ها پارامترهای اطلاعات درخواست شده را تعیین می کنند و یا اطلاعات مهمی درباره کاربر درخواست کننده اطلاعات ارائه می دهند. 

هدر پاسخ (Response header) – این هدر ها شامل اطلاعاتی در مورد پاسخ است. 

هدر هویتی (Entity header) – این هدر ها محتوای تشکیل دهنده بدنه پیام را توضیح می دهد.

 

کد های وضعیت HTTP (HTTP status codes)

زمانی که وب گردی میکنید ممکن است با صفحاتی مثل “کد 404 : صفحه مورد نظر شما پیدا نشد” و یا "کد 500 : سرور پاسخ گو نیست" و معادل آنها به انگلیسی 404 error: not found و 505 errors: server is not responding مواجه شوید.

این اعداد کد های وضعیت HTTP هستند.

5 گروه از کدهای وضعیتی وجود دارند که بر اساس رقم اولشان طبقه بندی می شوند:

1xx – اطلاعات

2xx – درخواست موفق بوده

3xx – درخواست کاربر به منبع (resource) دیگری منتقل شده

4xx – درخواست به نوعی خطا برخورده

5xx – سرور برای پردازش درخواست به مشکل برخورده

در این مقاله می توانید لیست کامل کد های وضعیت و توضیحاتشان را مطالعه کنید.

HTTPS (Hypertext Transfer Protocol Secure)

نسخه امن پروتکل HTTP را HTTPS گویند. در این نسخه ارتباط میان کاربر و سرور رمز گذاری (encrypt) می شود.

در HTTPS پروتکل ارتباطی با استفاده از Transport Layer Security (TLS) و یا Secure Sockets Layer (SSL) رمزگذاری می شود. به همین دلیل این پروتکل بیشتر اوقات HTTP روی TLS و یا HTTP روی SSL نامیده می شود.

هم TLS و هم SSL از سیستم رمزگذاری نامتقارن یا asymmetric encryption system استفاده می کنند. این سیستم از یک public key (encryption key) و یک private key (decryption keys) برای رمزگذاری سود می برد.

هرکسی می تواند از public key برای رمزگذاری پیام استفاده کند اما فقط با استفاده از private key که در اختیار سیستم های مناسب است (در اینجا کاربر و سرور) امکان باز کردن رمز پیام وجود دارد.

مثالی در مورد رمزگذاری نامتقارن

 
 

SSL/TLS handshake

زمانی که شما درخواستی به یک وب سایت که قابلیت ارتباط HTTPS دارد ارسال می کنید، وب سایت گواهی SSL و یا همان SSL Certificate خود را به مرورگر شما ارسال می کند. این پروسه شروع ارتباط میان مرورگر و وب سایت به SSL/TLS handshake معروف است.

SSL/TLS handshake شامل یک سری مراحل است که مرورگر شما و وب سایت یکدیگر را اعتبار سنجی می کنند و شروع به ارتباط از طریق تونل SSL/TLS می کنند.

اگر دقت کرده باشید هنگامی که ارتباط شما و وب سایت از طریق یک تونل ایمن و با استفاده از ارتباط HTTPS برقرار است، یک قفل مانند شکل زیر در آدرس بار مرورگرتان نشان داده می شود.

 
 

مزایای استفاده از HTTPS

مهمترین مزایای استفاده از HTTPS عبارتند از:

• اطلاعات حساس مشتری مانند مشخصات کارت های بانکی و اطلاعات حساس دیگر رمزگذاری شده و موقع ارتباط و خرید اینترنتی امکان دزدیده شدن توسط افراد دیگر که به ارتباط دسترسی دارند، وجود نخواهد داشت.

• کاربران مطمئن می شوند که وب سایت شما یک وب سایت ثبت شده است (البته در فضای اینترنت) و شما صاحب دامنه هستید

• مشتریان وب سایت مطمئن هستند که ارتباط از طریق HTTPS انجام شده و  ارتباطشان یک ارتباط امن است بنابراین اعتماد بیشتری به وب سایت شما می کنند 

در این مقاله سعی کردم نکات کلی در مورد پروتکل HTTP را توضیح بدم، در مقالات بعدی کمی بیشتر بر روی جزئیات کار میکنیم.

0 دیدگاه