تصویر حسین نائیجی
حسین نائیجی

غرق در دنیای صفر و یک

پیشگفتار / Preface

سلام به دوستان عزیز و همراهان گرامی.
در این مجموعه‌ی آموزشی از مرجع HTTP : The Definitive Guide استفاده شده است تا مطالب فارسی و با ارزشی گردآوری آوری شود.

درک معماری وب و نحوه کارکرد آن برای Web developer‌ و دوستان علاقه‌مند به Web Penetration Testing بسیار حائز اهمیت است. پشت هر ارتباطات موفقی در دنیای وب ، یک HTTP Hypertext Transfer Protocol است. زبانی که این امکان را می‌دهد تا client و server باهم تبادل اطلاعات و اسناد کنند. پروتکل HTTP برنامه‌ای است تا ارتباطات بر world wide web یا به اختصار www را امکان پذیر کند. تعداد زیادی از Application ها HTTP-base هستند. به طور ساده HTTP یک پروتکل دو طرفه بین web browser یا agent سمت کاربر و سمت Server است.

Overview of HTTP

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

HTTP: The Internet’s Multimedia Courier

ملیون‌ها عکس JPEG ، صفحات HTML ، فایل‌های متنی ، فایل‌های ویدئو‌های MPEG یا فایل‌های صوتی WAV و اپلت‌های JAVA و خیلی از موارد دیگر هر روز از طریق اینترنت در دسترس عموم قرار دارد.
پروتکل HTTP بخش عمده ای از این اطلاعات را به سرعت، راحت و قابل اعتماد از وب‌سرور‌ها در سراسر جهان به مرورگرهای وب روی دسکتاپ افراد منتقل می کند. به این دلیل که HTTP از data-transmission protocol قابل اعتمادی استفاده می‌کند.
این تضمین را می‌دهد که داد‌ه‌ها آسیب یا درهم ریختگی در حین ارسال و یا دریافت از آن طرف دنیا نداشته باشند. این خبر خوبی برای کاربرانی است که از مشغول استفاده از دنیای وب هستند. به این دلیل که شما می‌توانید بدون هیچ نگرانی در رابطه با جامعیت اطلاعات به آن‌ها دسترسی داشته باشید. و ارتباط قابل اعتماد Reliable transmission بستری را برای application developer ها آماده کرده است تا نگران اینکه دقیقا HTTP چگونه ارتباط برقرار می‌کند نباشند.
درواقع این اطمینان حاصل می‌شود تا در حمل نقل داده‌ها آسیب ، تکرار و یا تحریف نشوند. و برنامه نویسان می‌توانند بدون نگرانی از flaws یا نقض‌ها در اینترنت بر روی جزئیات اپلیکیشن خود متمرکز شوند . در ادامه بیشتر با نحوه کارکرد HTTP و انتقال Web’s traffic یا ترافیک وب صحبت خواهیم کرد.
محتوای وب در web server‌ها مستقر است. وب سرور‌ها با پروتکل HTTP با اجزای دنیای وب در تعامل هستند. به همین سبب به آن HTTP Server نیز می‌گویند.
این HTTP server داد‌های داخل اینترنت را ذخیره می‌کند و آن را به HTTP Client زمانی که درخواست کند ارائه می‌دهد.
قاعده کلی چنین چیزی است :
عامل کاربر یا Client درخواستی (Requests آن را بنامیم) به سمت Server ارسال می‌کند. Server داده‌هایی را که عامل‌کاربر درخواست کرده بود را به سمت کاربر ارسال می‌کند (Responses آن را بنامیم).
به تصویر زیر نگاه کنید. HTTP Client و HTTP server اجزای ساده دنیای www را تشکیل می‌دهند.

شما به احتمال زیاد هر روز از HTTP client استفاده می‌کنید. و عمومی‌ترین client مرورگر یا web browser است. مانند Firefox ، Google chrome , Opera و مواردی دیگر .
مرورگر با یک request به سمت سرور ، object مورد نظر را درخواست می‌کند و نهایتا آن را دریافت می‌کند و بر روی صفحه‌نمایش کاربر نشان می‌دهد.
مثال ، زمانی که شما صفحه‌ای همانند http://www.cesecurity.ir را درخواست کنید ، مرورگر شما یک HTTP Requests به سمت سرور cesecurity.ir ارسال می‌کند.
سرور هم تلاش می‌کند تا object (که می‌تواند یک فایل باشد باشد در این مورد اشاره به “index.html/”) در قالب HTTP response به همراه با type یا نوع object ، اندازه یا length و بقیه اطلاعات به سمت مرورگر برگرداند.

Resource

چنانچه ، منابع می‌تواند به صورت static یا به صورت dynamic که درخواستی است توسط برنامه‌های تحت وب ساخته شود.
محتوا‌های پویا یا dynamic براساس شناسه کاربر (identify) و اطلاعاتی که درخواست کردید ساخته می‌شود.در طول روز آنها می توانند یک تصویر زنده از یک دوربین به شما نشان دهند، یا به شما اجازه دهند سهام معامله کنید، پایگاه داده املاک را جستجو کنید، یا از فروشگاه های آنلاین هدیه بخرید.

به تصویر زیر نگاه کنید.

به طور خلاصه، منبع هر نوع محتوایی است. که می‌تواند یک فایل حاوی صفحه گسترده یا Spreadsheet پیش بینی فروش شرکت شما که یک منبع است باشد. یک دروازه وب web gateway برای اسکن قفسه های کتابخانه عمومی محلی شما یک منبع است. موتور جستجوی اینترنتی یا search engine یک منبع است. برای تغییر این متن بر روی دکمه ویرایش کلیک کنید. لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است.

Media Types

از آنجایی که اینترنت هزاران نوع داده مختلف را میزبانی می کند ، HTTP هر object یا شی که از طریق وب منتقل می شود را با یک قالب داده یا Format label به نام MIME به دقت برچسب گذاری می کند. MIME ( Multipurpose Internet Mail Extension )
در ابتدا برای حل مشکلاتی که در انتقال پیام‌ها بین سیستم‌های مختلف پست الکترونیکی پیش می آمد طراحی شد. MIME برای ایمیل کار می کرد که HTTP آن را برای توصیف و برچسب گذاری محتوای چندرسانه ای خود استفاده کرد.
سرورهای وب نوع MIME را به تمام داده های شی (همان object) HTTP می‌چسبانند . هنگامی که یک مرورگر وب یک شی را از سرور دریافت می‌کند، به نوع MIME مرتبط نگاه می‌کند تا ببیند آیا می‌داند چگونه آن شی را مدیریت کند یا خیر. اکثر مرورگرها می‌توانند صدها نوع شی محبوب را مدیریت کنند : نمایش فایل‌های تصویری، تجزیه و قالب‌بندی فایل‌های HTML، پخش فایل‌های صوتی از طریق بلندگوهای رایانه، یا راه‌اندازی نرم‌افزار افزونه خارجی برای مدیریت فرمت‌های خاص.

نوع MIME یک برچسب متنی است که به عنوان یک نوع شی اصلی (primary object) و یک نوع فرعی خاص (specific subtype) نشان داده می شود که با یک اسلش “/” از هم جدا شده اند.

  • یک سند متنی با فرمت HTML با text/html برچسب گذاری می شود.
  • یک سند متنی ASCII ساده با text/plain برچسب‌گذاری می‌شود.
  • یک نسخه JPEG از یک تصویر، image/jpeg خواهد بود.
  • یک تصویر با فرمت GIF به صورت image/gif خواهد بود.
  • ارائه مایکروسافت پاورپوینت می تواند application/vnd.ms-PowerPoint باشد.

و موارد بسیاری بیشتری وجود دارد که از برسی آن خودداری کرده ایم.