خط لوله اچتیتیپی
![](http://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/HTTP_pipelining.svg/220px-HTTP_pipelining.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/HTTP_logo.svg/220px-HTTP_logo.svg.png)
لوله گذاری 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، راه حلی برای این امر است. تا سال ۲۰۱۷ بیشتر مرورگرها به صورت پیش فرض از HTTP/2 پشتیبانی میکردند که در عوض از Multiplexing استفاده میکرد.
درخواستهای غیرمستقیم مانند POST
نباید خط لوله شوند. درخواستهای خواندن مثل GET
و HEAD
همواره میتوانند خط لوله شوند. دنباله ای از باقی درخواستهای بی قدرت، مانند PUT
و DELETE
را میتوان با توجه به این که آیا درخواستهای موجود در دنباله به تأثیر سایرین وابسته است یا نیست، تنظیم شوند یا خیر.
خط لوله HTTP به پشتیبانی از سرویس گیرنده و سرور نیاز دارد. سرورهای منطبق با HTTP/1.1 برای ایجاد پاسخهای معتبر، به درخواستهای خط لوله مورد نیاز هستند. ولی ممکن است عملاً درخواستها را همزمان پردازش نکنند.
اکثر مشکلهای خط لوله در گرههای میانی HTTP (هاپ به هاپ)، یعنی در سرورهای پراکسی، بخصوص در سرورهای پروکسی شفاف (اگر یکی از آنها در امتداد زنجیره HTTP به درخواستهای خط لوله، درست رسیدگی نکند، هیچ چیزی آن طور که باید کار نمیکند) رخ میدهد.
استفاده از خط لوله با سرورهای پراکسی HTTP نیز اغلب توصیه نمیشود چون مشکل مسدود کردن HOL ممکن است واقعاً پاسخهای سرور پراکسی را کم کند (به دلیل اینکه پاسخهای سرور باید به ترتیب درخواستهای دریافتشده باشد).
برای مثال: اگر کلاینتی ۴ درخواست GET خط لوله را، به واسطه یک اتصال به یک پروکسی ارسال کند و اولین مورد در حافظه پنهان آن نباشد، پروکسی باید آن درخواست را به وب سرور مقصد ارسال کند. اگر سه درخواست زیر در حافظه پنهان آن پیدا شود، پروکسی باید منتظر جواب وب سرور باشد، و بعد باید آن را برای مشتری بفرستد و فقط پس از آن است که میتواند که سه جواب ذخیره شده را هم ارسال کند.
اگر در عوض یک کلاینت چهار اتصال را به یک پروکسی باز کند و برای هر اتصال، یک درخواست GET ارسال کند (بدون استفاده از خط لوله)، پروکسی میتواند ۳ پاسخ ذخیره شده را، پیش از گرفتن پاسخ از سرور به صورت موازی برای مشتری ارسال کند و زمان تکمیل کلی را کم کند (زیرا درخواستها به صورت موازی و بدون مشکل مسدود کردن سر خط) ارائه میشوند. این منفعت در جریانهای چندگانه HTTP/2 نیز وجود دارد.
وضعیت پیادهسازی
[ویرایش]خط لوله، در HTTP/1.1 معرفی شد و در HTTP/1.0 حضور نداشت.
همواره شکایتهایی در بارهٔ کار نکردن مرورگرها، سرورهای پروکسی و غیره در موقع استفاده از درخواستها/پاسخهای خطبندی شده وجود داشته است، تا جایی که برای سالهای زیادی (حداقل تا سال ۲۰۱۱) توسعهدهندگان نرمافزار، مهندسان، کارشناسان وب و غیره تلاش در جمعبندی داشتند. انواع متفاوتی از مشکلهایی که آنها اشاره کردند، برای رفع مشکلات و ارائه توصیههایی در مورد نحوه برخورد با خط لوله در وب باز.
پیادهسازی در مرورگرهای وب
[ویرایش]از بین همه مرورگرهای اصلی، فقط Opera دارای یک پیادهسازی کاملاً کارآمد بود که به صورت پیش فرض فعال بود. در باقی مرورگرها، خط لوله HTTP غیرفعال یا اجرا نشده بود.
- اینترنت اکسپلورر ۸ از درخواستهای خط لوله پشتیبانی نمیکند، به دلیل نگرانی در مورد پروکسیهای خطا و مسدود کردن خط.
- اینترنت اکسپلورر ۱۱ از خط لولهها پشتیبانی نمیکند.
- مرورگرهای موزیلا (مانند موزیلا فایرفاکس، SeaMonkey و Camino) راه پشتیبانی از لولهکشی استفاده میشدند؛ با این حال، در فایرفاکز ۵۴ حذف شد. هنگامی که پشتیبانی میشد، خط لوله بهطور پیش فرض غیرفعال میشد تا از مشکلات با سرورهای بد رفتار جلوگیری شود. اگر پایپ لاین توسط کاربر فعال شده بود، مرورگرهای موزیلا از برخی از هوریستیکها استفاده میکردند، عمدتاً برای خاموش کردن پایپ لین برای سرورهای قدیمی مایکروسافت IIS. در نهایت حذف به SeaMonkey منتقل شد.
- کنکیرور ۲٫۰ از خط لوله سازی پشتیبانی میکند، اما بهطور پیش فرض غیرفعال است.
- گوگل کروم قبلاً از خط لوله سازی پشتیبانی میکرد، اما به دلیل اشکال و مشکلات در سرورهای بد رفتار غیرفعال شده است.
- Pale Moon (برودر وب) از خط لوله پشتیبانی میکند و بهطور پیش فرض فعال میشود.
سایر پیادهسازیها
[ویرایش]کتابخانه libwww که توسط کنسرسیوم وب جهانی (W3C) ساخته شده، از زمان انتشار نسخه ۵٫۱ در ۱۸ فوریه ۱۹۹۷، از خط لوله پشتیبانی میکند
باقی کتابخانههای توسعه برنامه که از خط لوله HTTP پشتیبانی میکنند عبارتند از:
- ماژولهای Perl که از سرویس گیرنده برای لولهگذاری HTTP پشتیبانی میکنند، http://async و کتابخانه LWPng (libwww-perl New Generation) هستند.
- مایکروسافت NET Framework 3.5 از خط لوله HTTP در
System.
Net.
HttpWebRequest
. QNetworkRequest
کلاس Qt، معرفی شده در ۴٫۴.
بعضی از برنامههای کاربردی دیگر که در حال حاضر از خط لوله بهرهبرداری میکنند عبارتند از:
- سرور برنامه IceBreak از BUILD389
- phttpget از FreeBSD (یک کلاینت HTTP خط لوله مینیمالیستی)
- libcurl قبلاً پشتیبانی محدودی برای خط لوله با استفاده از گزینه CURLMOPT_PIPELINING داشت، اما این پشتیبانی در نسخه ۷٫۶۵٫۰ حذف شد.
- portsnap (سیستم توزیع درخت پورتهای FreeBSD)
- ابزار بستهبندی پیشرفته (APT) از خط لوله پشتیبانی میکند.
- Subversion (SVN) دارای پشتیبانی اختیاری برای خط لوله HTTP با ماژول دسترسی سرف WebDAV است (ماژول پیش فرض، نئون، پشتیبانی از خط لوله ندارد).
- Microsoft Message Queuing در Windows Server 2003 بهطور پیشفرض از خط لوله در HTTP استفاده میکند و میتوان آن را برای استفاده در HTTPS پیکربندی کرد.
- IBM CICS 3.1 از خط لوله HTTP در مشتری خود پشتیبانی میکند.
ابزارهای آزمایشی ای که از خط لوله HTTP پشتیبانی میکنند عبارتند از:
جستارهای وابسته
[ویرایش]منابع
[ویرایش]پیوند به بیرون
[ویرایش]- 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=
(راهنما) - سوالات متداول خط لوله HTTP/1.1 در mozilla.org
- "اثرات عملکرد شبکه HTTP/1.1، CSS1، و PNG" در w3.org
- مقاله "بهینه سازی زمان بارگذاری صفحه".
- phttpget
- سرف سی کتابخانه