خط لوله اچ‌تی‌تی‌پی

از ویکی‌پدیا، دانشنامهٔ آزاد
(تغییرمسیر از خط لوله HTTP)
نمودار زمانی اتصال بدون خط لوله در مقابل خط لوله

لوله گذاری HTTP یکی از ویژگی های HTTP/1.1 است که به چند درخواست HTTP اجازه می دهد تا به واسطه یک اتصال TCP بدون انتظار برای پاسخ های مربوطه ارسال شوند. HTTP/1.1 به سرورها نیاز دارد که به درخواست های خط لوله به درستی پاسخ بدهند، با پاسخ های غیر خط لوله اما معتبر حتی اگر سرور از لوله گذاری HTTP پشتیبانی نمی کند. برخلاف این تقاضا ، اغلب سرورهای قدیمی HTTP/1.1 از لوله‌گذاری ، درست پشتیبانی نمی‌کنند بنابراین اغلب مشتریان HTTP ناچار می‌شوند که از لوله‌گذاری HTTP استفاده نکنند.

این تکنیک با مالتی پلکس کردن به واسطه HTTP/2 جایگزین شد، که توسط اغلب مرورگرهای مدرن پشتیبانی می‌شود.

در HTTP/3 ، مالتی پلکس شدن به واسطه QUIC که جایگزین TCP می شود، صورت می گیرد . این امر زمان بارگذاری را بیشتر می کاهد ، زیرا حتی اگر بعضی از بسته‌ها از بین بروند، هیچ انسداد سر خطی وجود ندارد.

انگیزه و محدودیت[ویرایش]

خط لوله شدن درخواست ها منجر به بهبود چشمگیر هنگام بارگذاری صفحات HTML، به خصوص در اتصالات با تأخیر زیاد مثل اتصالات اینترنت ماهواره ای می شود. بالا رفتن سرعت در اتصالات پهنای باند کمتر معلوم است، زیرا که محدودیت HTTP 1.1 هنوز لحاظ می‌شود: سرور باید پاسخ‌های خود را به همان ترتیبی که درخواست‌ها دریافت کرده‌اند ارسال کنند—بنابراین کل اتصال در ابتدا در ابتدا باقی می‌ماند و مسدود کردن HOL احتمال دارد رخ بدهد.

عملیات ناهمزمان HTTP/2 و SPDY ، راه حلی برای این امر است. تا سال 2017 بیشتر مرورگرها به صورت پیش فرض از HTTP/2 پشتیبانی می کردند که در عوض از Multiplexing استفاده می کرد.

درخواست‌های غیرمستقیم مانند POST نباید خط لوله شوند. درخواست های خواندن مثل GET و HEAD همواره می توانند خط لوله شوند. دنباله ای از باقی درخواست های بی قدرت ، مانند PUT و DELETE را می توان با توجه به این که آیا درخواست های موجود در دنباله به تأثیر سایرین وابسته است یا نیست ، تنظیم شوند یا خیر.

خط لوله HTTP به پشتیبانی از سرویس گیرنده و سرور نیاز دارد. سرورهای منطبق با HTTP/1.1 برای ایجاد پاسخ های معتبر ، به درخواست های خط لوله مورد نیاز هستند . ولی ممکن است عملا درخواست ها را هم زمان پردازش نکنند.

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

استفاده از خط لوله با سرورهای پراکسی HTTP نیز اغلب توصیه نمی‌شود چون مشکل مسدود کردن HOL ممکن است واقعاً پاسخ‌های سرور پراکسی را کم کند (به دلیل اینکه پاسخ‌های سرور باید به ترتیب درخواست‌های دریافت‌شده باشد).

برای مثال : اگر کلاینتی 4 درخواست GET خط لوله را ، به واسطه یک اتصال به یک پروکسی ارسال کند و اولین مورد در حافظه پنهان آن نباشد، پروکسی باید آن درخواست را به وب سرور مقصد ارسال کند. اگر سه درخواست زیر در حافظه پنهان آن پیدا شود، پروکسی باید منتظر جواب وب سرور باشد، و بعد باید آن را برای مشتری بفرستد و فقط پس از آن است که می تواند که سه جواب ذخیره شده را هم ارسال کند.

اگر در عوض یک کلاینت چهار اتصال را به یک پروکسی باز کند و برای هر اتصال، یک درخواست GET ارسال کند (بدون استفاده از خط لوله)، پروکسی می تواند 3 پاسخ ذخیره شده را ، پیش از گرفتن پاسخ از سرور به صورت موازی برای مشتری ارسال کند و زمان تکمیل کلی را کم کند (زیرا درخواست ها به صورت موازی و بدون مشکل مسدود کردن سر خط) ارائه می شوند. این منفعت در جریان های چندگانه HTTP/2 نیز وجود دارد.

وضعیت پیاده سازی[ویرایش]

خط لوله ، در HTTP/1.1 معرفی شد و در HTTP/1.0 حضور نداشت.

همواره شکایت هایی در باره ی کار نکردن مرورگرها، سرورهای پروکسی و غیره در موقع استفاده از درخواست‌ها/پاسخ‌های خط‌بندی شده وجود داشته است، تا جایی که برای سال‌های زیادی (حداقل تا سال 2011) توسعه‌دهندگان نرم‌افزار، مهندسان، کارشناسان وب و غیره تلاش در جمع‌بندی داشتند. انواع متفاوتی از مشکل هایی که آن ها اشاره کردند، برای رفع مشکلات و ارائه توصیه هایی در مورد نحوه برخورد با خط لوله در وب باز.

پیاده سازی در مرورگرهای وب[ویرایش]

از بین همه مرورگرهای اصلی، فقط Opera دارای یک پیاده سازی کاملاً کارآمد بود که به صورت پیش فرض فعال بود. در باقی مرورگر ها ، خط لوله HTTP غیرفعال یا اجرا نشده بود .

  • اینترنت اکسپلورر 8 از درخواست های خط لوله پشتیبانی نمی کند، به دلیل نگرانی در مورد پروکسی های خطا و مسدود کردن خط.
  • اینترنت اکسپلورر 11 از خط لوله ها پشتیبانی نمی کند.
  • مرورگرهای موزیلا (مانند موزیلا فایرفاکس، SeaMonkey و Camino) راه پشتیبانی از لوله کشی استفاده می شدند؛ با این حال، در فایرفاکز 54 حذف شد. هنگامی که پشتیبانی می شد، خط لوله به طور پیش فرض غیرفعال می شد تا از مشکلات با سرورهای بد رفتار جلوگیری شود. اگر پایپ لاین توسط کاربر فعال شده بود، مرورگرهای موزیلا از برخی از هوریستیک ها استفاده میکردند، عمدتا برای خاموش کردن پایپ لین برای سرورهای قدیمی مایکروسافت IIS. در نهایت حذف به SeaMonkey منتقل شد.
  • کنکیرور ۲.۰ از خط لوله سازی پشتیبانی می کند، اما به طور پیش فرض غیرفعال است.
  • گوگل کروم قبلاً از خط لوله سازی پشتیبانی می کرد، اما به دلیل اشکال و مشکلات در سرورهای بد رفتار غیرفعال شده است.
  • Pale Moon (برودر وب) از خط لوله پشتیبانی می کند و به طور پیش فرض فعال می شود.

سایر پیاده سازی ها[ویرایش]

کتابخانه libwww که توسط کنسرسیوم وب جهانی (W3C) ساخته شده، از زمان انتشار نسخه 5.1 در 18 فوریه 1997، از خط لوله پشتیبانی میکند

باقی کتابخانه های توسعه برنامه که از خط لوله HTTP پشتیبانی میکنند عبارتند از:

  • ماژول‌های Perl که از سرویس گیرنده برای لوله‌گذاری HTTP پشتیبانی می‌کنند، HTTP::Async و کتابخانه LWPng ( libwww-perl New Generation) هستند.
  • مایکروسافت NET Framework 3.5 از خط لوله HTTP در System. Net. HttpWebRequest .
  • QNetworkRequest کلاس Qt ، معرفی شده در 4.4.

بعضی از برنامه های کاربردی دیگر که در حال حاضر از خط لوله بهره برداری میکنند عبارتند از:

    • سرور برنامه IceBreak از BUILD389
    • phttpget از FreeBSD (یک کلاینت HTTP خط لوله مینیمالیستی)
    • libcurl قبلاً پشتیبانی محدودی برای خط لوله با استفاده از گزینه CURLMOPT_PIPELINING داشت، اما این پشتیبانی در نسخه 7.65.0 حذف شد.
    • portsnap (سیستم توزیع درخت پورت های FreeBSD )
    • ابزار بسته بندی پیشرفته (APT) از خط لوله پشتیبانی می کند.
    • Subversion (SVN) دارای پشتیبانی اختیاری برای خط لوله HTTP با ماژول دسترسی سرف WebDAV است (ماژول پیش فرض، نئون، پشتیبانی از خط لوله ندارد).
    • Microsoft Message Queuing در Windows Server 2003 به طور پیش‌فرض از خط لوله در HTTP استفاده می‌کند و می‌توان آن را برای استفاده در HTTPS پیکربندی کرد.
    • IBM CICS 3.1 از خط لوله HTTP در مشتری خود پشتیبانی می کند.


ابزارهای آزمایشی ای که از خط لوله HTTP پشتیبانی میکنند عبارتند از:

httperf

جستارهای وابسته[ویرایش]

منابع[ویرایش]

پیوند به بیرون[ویرایش]

  • RFC 7230Fielding, R.; Reschke, J. (2014). "Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing". ietf.org. doi:10.17487/RFC7230. Retrieved 2014-07-24. {{cite journal}}: Cite journal requires |journal= (help) فیلدینگ، آر. Reschke, J (ویرایش‌ها). "پروتکل انتقال ابرمتن (HTTP/1.1): نحو و مسیریابی پیام" . ietf.org. doi : 10.17487/RFC7230 . بازیابی شده در 2014-07-24 . {{ cite journal }} : استناد به مجله نیازمند | journal= ( راهنما )</link>
  • سوالات متداول خط لوله HTTP/1.1 در mozilla.org
  • "اثرات عملکرد شبکه HTTP/1.1، CSS1، و PNG" در w3.org
  • مقاله "بهینه سازی زمان بارگذاری صفحه".
  • phttpget
  • سرف سی کتابخانه