اگر میخواهی با مفهم پروتکل ها و پروتکل HTTP آشنا بشی مقاله انواع پروتکل های TCP/IP بخونید و اگه میخواهید حرفه ای تر با پروتکل HTTP آشنا بشید تا آخر این مقاله رو با دقت بخونید
اچ تی تی پی پروتکلی هست که امکان واکشی از منابع HTML رو به ما میدهد. http مبنای هر نو مبادله داده روی وب را تشکیل می دهد و یک پروتکل کلاینت سرور هست یعنی درخواست ها رو از یک مرورگر وب آغاز میشود که به این ترتیب یک سند کامل با ترکیب سند های کوچک و جزئی واکشی میشود مثل یک متن یا تصاویر و ویدیو ها یا اسکریپت ها و... در مرورگر وب بازسازی میشود
بعدا در یک مقاله جدا درباره HTML و اسکریپت ها حرف میزنیم
کلاینتها و سرورها از طریق مبادله پیامهای بر عکس جریان دادهها با هم ارتباط میگیرند. این پیامها از سوی یک مرورگر وب که همون کلاینت هست ارسال میشوند (درخواست) نام دارد. از سوی دیگر پیامهایی که از سوی سرور ارسال میشوند، (پاسخ) نامیده میشوند.
پروتکل HTTP در اوایل دهه 1990 میلادی تعریف شده و یک پروتکل قابل بسط است که در طی زمان تکامل یافته است. این پروتکل در لایه اپلیکیشن شبکه قرار دارد و روی اتصال TCP یا روی یک اتصال TCP رمزنگاری شده با TLS ارسال میشود. با این حال هر پروتکل انتقال پایداری میتواند به این منظور مورد استفاده قرار گیرد. پروتکل HTTP با توجه به بسطپذیری خود نه تنها برای واکشی اسناد ابرمتن بلکه برای واکشی اسناد و تصاویر یا برای ارسال محتوا به سرورها مانند نتایج یک فرم HTML نیز استفاده میشود. از پروتکل HTTP میتوان برای واکشی بخشهایی از سند برای بهروزرسانی صفحه های وب بنا به تقاضا هم استفاده کرد.
اچ تی تی پی یک پروتکل کلاینت سرور است، یعنی درخواستها از سوی یک نهاد ارسال میشوند که یک مرورگر وب است، اما در عمل میتواند هر چیز دیگری نیز باشد. برای نمونه یک ربات که وب را خزش میکند تا ایندکس یک موتور جستجو را گردآوری کرده و نگهداری کند نیز میتواند از این پروتکل بهره بگیرد.
هر درخواست منفرد یا (پیامهای بر عکس جریان دادهها) روی یک سرور ارسال میشود که آن را اداره میکند و یک پاسخ ارائه میدهد که response نام دارد. البته بین کلاینت و سرور، نهادهای زیادی وجود دارند که در مجموع واسطه ها نام دارند و عملیات متفاوتی را اجرا کرده و برای نمونه به عنوان یک کش عمل میکنند.
در عمل بین یک مرورگر و سرور برخی رایانههای قرار میگیرند که درخواست کاربر را اداره میکنند که شامل روترها، مودمها و موارد دیگر میشود. به لطف طراحی لایهبندیشده وب، این موارد در لایههای شبکه و انتقال پنهان شدهاند. HTTP در لایه بالا یعنی لایه اپلیکیشن قرار میگیرد. اما لایههای زیرین غالباً ارتباطی با توضیح HTTP ندارد.
عامل کاربر به هر ابزاری گفته میشود که به دستور از کاربر عمل کند. این نقش به طور عمده از سوی مرورگر وب اجرا میشود. امکان اجرای آن از سوی برنامههای دیگر که از سوی مهندسان و توسعهدهندگان وب برای دیباگ اپلیکیشنها استفاده میشوند نیز وجود دارد.
مرورگر همیشه آن چیزی است که درخواست را آغاز میکند. بنابراین سرور هرگز آغازگر تبادل پیام نیست، گرچه در طی سالهای اخیر برخی مکانیسمهایی به HTTP اضافه شدهاند که پیامهای آغازشده از سوی سرور را شبیهسازی میکنند.
مرورگر برای عرضه یک صفحه وب، درخواستی ابتدایی جهت واکشی سند HTML ارسال میکند که یک بازنمایی از صفحه است. سپس این فایل تحلیل میشود و درخواستهای متناظر دیگری برای اجرای اسکریپتها، اطلاعات چیدمان صفحه CSS و منابع فرعی قرار گرفته درون صفحه که عموماً شامل تصاویر و ویدئوها است ارائه میشود. در ادامه مرورگر وب این منابع را با هم ترکیب میکند تا یک سند کامل را به کاربر عرضه کند که صفحه وب نامیده میشود. اسکریپتهای اجرا شده از سوی مرورگر میتوانند منابع بیشتری را در فازهای بعدی واکشی کنند و مرورگر بر همین اساس صفحه وب را بهروزرسانی میکند.
یک صفحه وب به سند ابرمتن گفته میشود. این به این معنی است که برخی بخشهای متن نمایش یافته، لینکهایی هستند که میتوانند فعال شوند که به طور معمول با کلیک ماوس انجام مییابد تا یک صفحه وب واکشی شود. به این ترتیب کاربر میتواند عامل کاربر خود را هدایت کند و در وب به گردش بپردازد. مرورگر این جهتها را در درخواستهای HTTP ترجمه و در ادامه پاسخهای HTTP را تفسیر میکند تا یک پاسخ روشن به کاربر بده.
بعدا در یک مقاله جدا درباره CSS حرف میزنیم
در سمت دیگر این کانال ارتباطی یک سرور قرار دارد که اسناد درخواستی از سوی کاربر را عرضه میکند. سرور مجازاً به صورت یک رایانه منفرد ظاهر میشود، اما ممکن است مجموعهای از سرورها باشند که بار کاری را با هم به اشتراک بگذارند یا یک نرمافزار پیچیده باشد که از رایانههای دیگر که مسئول بخشهای کش، پایگاه داده، یا سرورهای e-commerce پرسوجو کرده و سند را بسته به تقاضا به صورت کامل یا جزء به جزء تولید میکند.
سرور حتما یک رایانه منفرد نیست، بلکه چند وهله نرمافزاری مختلف سرور میتوانند روی یک رایانه منفرد میزبانی شوند. با استفاده از نسخه 1.1 پروتکل HTTP و هدر Host حتی امکان اشتراک نشانی IP یکسان نیز وجود دارد.
بین مرورگر وب و سرور، رایانهها و دستگاههای بسیار زیادی قرار میگیرند که پیامهای HTTP را رله میکنند. به دلیل ساختار لایهبندیشده وب، اغلب این دستگاهها روی لایه انتقال یا شبکه یا لایه فیزیکی عمل میکنند و در HTTP نمایش داده میشه و از این رو میتوانند تأثیر عمدهای روی عملکرد داشته باشند. عناصری که روی لایههای اپلیکیشن عمل میکنند، عموماً واسطهها نامیده میشوند. این موارد میتوانند شفاف باشند و درخواستهایی که دریافت میکنند را بدون هیچ گونه دستکاری، فوروارد کنند یا این که غیر شفاف باشند و در این حالت درخواست را پیش از ارسال به سمت سرور مورد نوعی تغییر قرار میدهند. واسطهها میتوانند کارکردهای زیادی را اجرا کنند.
یک اتصال در لایه انتقال، کنترل میشود و از این رو اساساً خارج از دامنه http قرار دارد. با این حال پروتکل http برای این که مبتنی بر اتصال باشد، نیازی به لایه زیربنایی انتقال ندارد، و تنها کافی است که پایدار باشد یعنی پیامها را از دست ندهد یا خطایی نشان دهد از میان دو پروتکل نتایج انتقال در اینترنت، TCP پایدار است، اما UDP چنین نیست از این رو پروتکل http روی استاندارد TCP کار میکند که مبتنی بر اتصال است.
پیش از آن که یک کلاینت و سرور بتوانند جفت درخواست و پاسخ HTTP را با هم مبادله کنند، باید یک اتصال TCP برقرار سازند و این فرایند نیازمند چندین رفت و برگشت است رفتار پیشفرض HTTP/1.0 این است که برای هر جفت درخواست و پاسخ HTTP یک اتصال جدید TCP باز کند. این وضعیت در زمان ارسال چنین درخواست به صورت پشت سر هم، کارآیی کمتری نسبت به اشتراک یک TCP منفرد دارد.
برای رفع این نقیصه، HTTP/1.1 مفهوم Pipelining و اتصالهای مداوم را معرفی کرده است. به این ترتیب اتصال زیربنایی TCP میتواند تا حدودی توسط هر Connection کنترل شود. HTTP/2.2 یک گام پا را بالا تر گذاشته و پیام ها را روی یک اتصال منفرد تقسیم میکند و به این ترتیب اتصال TCP بهره وری بالاتری پیدا میکند.
ماهیت بسط پذیر پروتکل HTTP در طی زمان به ما این امکان را داده است که کنترل و کارکردهای بیشتری روی وب داشته باشیم. متدهای کش یا احراز هویت، کارکردهایی هستند که در ابتدا از سوی HTTP مدیریت میشدند. به طور عکس توانایی رهایی از قید origin تنها در دهه 2010 میلادی به این پروتکل اضافه شده است.
فهرست چیز هایی که پروتکل HTTP کنترل میکند :
کش کردن : نحو کش شدن سندها را میتوان با استفاده از پروتکل HTTP کنترل کرد. سرور میتواند به واسطهها و کلاینتها در مورد این که کش کردن چطور و برای چه مدتی انجام شود، دستورالعمل بدهد. کلاینت میتواند به واسطههای بیدرنگ کش دستور دهد که سند ذخیره شده را نادیده بگیرند.
رهایی از قید Origin : مرورگرهای وب برای جلوگیری از سرقت اطلاعات و دیگر مداخلات در حریم خصوصی کاربران، یک جداسازی الزامی بین وبسایتها ایجاد میکنند، به این ترتیب تنها صفحههایی با منشأ Origin یکسان میتوانند به همه اطلاعات صفحه وب دسترسی داشته باشند. با این که چنین قیدی یک مزاحمت برای سرور محسوب میشود، اما هدرهای HTTP میتوانند این جداسازی صریح را در سمت سرور آزاد سازند و به سند امکان دهند که یک لحاف چهل تیکه از اطلاعات باشد که از دامنههای مختلف تأمین میشوند. حتی ممکن است برخی دلایل امنیتی برای انجام این کار وجود داشته باشد.
احراز هویت :برخی صفحههای وب را میتوان محافظت کرد، به طوری که تنها کاربران خاصی بتوانند به آنها دسترسی داشته باشند. فرایند ابتدایی احراز هویت میتواند از سوی HTTP ارائه شود، که این کار یا از طریق WWW-Authenticate و هدرهای مشابه یا با تعیین یک نشست خاص با استفاده از کوکیهای HTTP انجام مییابد.
پراکسی و تونلینگ : سرورها یا کلاینتها معمولا روی اینترانت قرار دارند و نشانی IP واقعیشان رو از دیگر رایانه ها پنهان میکنند. بعد درخواستهای HTTP از طریق واسطه ها عبور میکنند تا از این موانع شبکه رد شوند. البته همه پراکسیها، پراکسیهای HTTP نیستند.
نشستها : با استفاده از کوکیهای HTTP به شما امکان میدهد که درخواستهای HTTP را به حالت سرور پیوند دهید. با این کار نشستها ایجاد میشوند، هر چند که HTTP ابتدایی یک پروتکل بیحالت هست و این وضعیت نه تنها برای مدیریت سبد خرید سایت های فروشگاهی مفید است، بلکه برای هر سایتی که امکان پیکربندی خروجی خود را به کاربر میدهد، مفید خواهد بود.
زمانی که یک کلاینت میخواهد با یک سرور ارتباط بگیرد، چه یک سرور نهایی و چه پراکسی بیدرنگ باشد، مراحل زیر را اجرا میکند:
به مثال زیر توجه کنید :
درخواستهای HTTP :
GET / HTTP/1.1 Host: developer.mozilla.org Accept-Language: fr
پاسخ های HTTP :
HTTP/1.1 200 OK Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-7449-479b075b2891b" Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html <!DOCTYPE html... (here comes the 29769 bytes of the requested web page)
بستن یا استفاده مجدد از اتصال برای درخواستها بعدی هست
GET = متد
/ = مسیر
HTTP/1.1 = نسخه کنترلHost: developer.mozilla.org Accept-Language: fr =هدر
متد ها میتوانند GET یا POST باشند که عملیاتی را تعریف میکند که کلاینت میخواهد اجرا کند
هدف URL یا مسیر مطلق پروتکل و پورت و دامنه است و بر اساس کانتکست درخواست مشخص میشود قالببندی این هدف درخواست بر اساس متدهای مختلف HTTP متفاوت است
نسخه پروتکل HTTP
هدر های اختیاری که اطلاعات اضافی را به سرورها انتقال میدهند
HTTP/1.1 = نسخه کنترل
200 = کد وضعیت
OK = پیام وضعیتDate: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-7449-479b075b2891b" Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html = هدر
نسخه پروتکل HTTP که استفاده شده است
کد وضعیت (انگلیسی : Status Code) که نشان میدهد آیا درخواست موفق بوده یا نه و دلیل آن چیست
یک پیام وضعیت که توضیح کوتاه غیر قابل استناد در مورد کد وضعیت است
هدرهای HTTP مانند مواردی که در خصوص درخواست HTTP برشمردیم
پراستفادهترین API مبتنی بر HTTP یک API به نام XMLHttpRequest است که میتواند برای مبادله داده ها بین یک کلاینت و سرور استفاده شود Fetch API جدید و همین قابلیتها را با مجموعه امکانات قدرتمندتر عرضه میکند.
API دیگر رویدادهای ارسالی از سمت سرور هستند که یک سرویس یکطرفه هستند که به سرور امکان میدهند تا رویدادها را به کلاینت ارسال کند و از HTTP به عنوان یک سازوکار انتقالی بهره بگیرد. کلاینت با استفاده از اینترفیس EventSource یک اتصال باز کرده و دستگیرههای رویداد را ایجاد میکند. مرورگر کلاینت به طور خودکار، پیامهایی را که روی استریم HTTP به اشیای مناسب Event میرسند، تبدیل میکند و آنها را به دستگیرههای رویدادی تحویل میدهد که برای آن نوع type رویداد ثبت شدهاند و یا اگر دستگیره رویدادی برای آن نوع خاص تعیین نشده باشید، به دستگیره رویداد تحویل میدهد
مارو در شبکه های اجتماعی زیر دنبال کنید ??
خب تا مقاله های دیگر خدانگهدار ??
مقاله های پیشنهاد شده
مفاهیم اصلی شبکه , آدرس آی پی چیست ؟ (IPv4 VS IPv6) , تهدید های امنیتی رایج در دنیای سایبری