ضغط HTTP

يُعد ضغط HTTP إحدى الإمكانيات التي يمكن تضمينها في خوادم الويب وعملاء الويب لتحسين سرعة النقل واستخدام النطاق الترددي. [ 1 ]

تُضغط بيانات HTTP قبل إرسالها من الخادم: تُعلن المتصفحات المتوافقة عن طرق الضغط المدعومة للخادم قبل تنزيل التنسيق الصحيح؛ أما المتصفحات التي لا تدعم طرق الضغط المتوافقة فتُنزّل البيانات غير المضغوطة. من أكثر طرق الضغط شيوعًا gzip و Brotli ؛ وتُحدّث هيئة IANA قائمة كاملة بالطرق المتاحة . [ 2 ]

توجد طريقتان مختلفتان لضغط البيانات في بروتوكول HTTP. على مستوى أدنى، قد يشير حقل رأس Transfer-Encoding إلى أن حمولة رسالة HTTP مضغوطة. أما على مستوى أعلى، فقد يشير حقل رأس Content-Encoding إلى أن موردًا يتم نقله أو تخزينه مؤقتًا أو الإشارة إليه بطريقة أخرى مضغوط. يُعدّ الضغط باستخدام Content-Encoding أكثر انتشارًا من الضغط باستخدام Transfer-Encoding، ولا تُعلن بعض المتصفحات عن دعمها لضغط Transfer-Encoding لتجنب حدوث أخطاء في الخوادم. [ 3 ]

التفاوض على مخطط الضغط

تتم المفاوضات على مرحلتين، موصوفتين في RFC 2616 و RFC 9110:

1. يُعلن عميل الويب عن أنظمة الضغط التي يدعمها من خلال تضمين قائمة من الرموز المميزة في طلب HTTP . بالنسبة لـ Content-Encoding ، توجد القائمة في حقل يُسمى Accept-Encoding ؛ أما بالنسبة لـ Transfer-Encoding ، فيُسمى الحقل TE .

طلب GET إلى /encrypted-area HTTP / 1.1 Host : www.example.com Accept-Encoding : gzip, deflate

٢. إذا كان الخادم يدعم نظام ضغط واحد أو أكثر، فقد يتم ضغط البيانات الصادرة باستخدام طريقة واحدة أو أكثر مدعومة من كلا الطرفين. في هذه الحالة، سيضيف الخادم حقل Content-Encoding أو Transfer-Encoding في استجابة HTTP مع ذكر أنظمة الضغط المستخدمة، مفصولة بفواصل.

HTTP / 1.1 200 OK التاريخ : الاثنين، 26 يونيو 2016، 22:38:34 بتوقيت غرينتش الخادم : Apache/1.3.3.7 (Unix) (Red-Hat/Linux) آخر تعديل : الأربعاء، 8 يناير 2003، 23:11:55 بتوقيت غرينتش نطاقات القبول : بايت طول المحتوى : 438 الاتصال : مغلق نوع المحتوى : نص/html؛ ترميز الأحرف: UTF-8 ترميز المحتوى : gzip

لا يُلزم خادم الويب بأي حال من الأحوال باستخدام أي طريقة ضغط  - وهذا يعتمد على الإعدادات الداخلية لخادم الويب وقد يعتمد أيضًا على البنية الداخلية للموقع الإلكتروني المعني.

رموز ترميز المحتوى

تتولى هيئة IANA الاحتفاظ بالقائمة الرسمية للرموز المميزة المتاحة للخوادم والعملاء، [ 4 ] وهي تتضمن ما يلي:

  • brBrotli ، وهي خوارزمية ضغط مصممة خصيصًا لترميز محتوى HTTP، ومحددة في RFC 7932 ومطبقة في جميع المتصفحات الرئيسية الحديثة. 
  • compress– طريقة برنامج "الضغط" في نظام يونكس (طريقة تاريخية؛ تم إهمالها في معظم التطبيقات واستُبدلت بـ gzip أو deflate)
  • deflate– الضغط القائم على خوارزمية deflate (الموصوفة في RFC 1951 )، وهو مزيج من خوارزمية LZ77 وتشفير Huffman، ملفوف داخل تنسيق بيانات zlib ( RFC 1950  
  • exiتبادل XML الفعال من W3C
  • gzipتنسيق GNU zip (الموصوف في RFC 1952 ). يستخدم خوارزمية deflate للضغط، لكن تنسيق البيانات وخوارزمية التحقق من المجموع الاختباري يختلفان عن ترميز المحتوى "deflate". هذه الطريقة هي الأكثر دعمًا على نطاق واسع اعتبارًا من مارس 2011. [ 5 ] 
  • identity– لا يتم استخدام أي تحويل. هذه هي القيمة الافتراضية لترميز المحتوى.
  • pack200-gzip– تنسيق نقل الشبكة لأرشيفات جافا [ 6 ]
  • zstd- ضغط Zstandard، المحدد في RFC 8478 

بالإضافة إلى ذلك، يتم استخدام عدد من الرموز غير الرسمية أو غير القياسية في الواقع العملي إما من قبل الخوادم أو العملاء:

  • bzip2– ضغط يعتمد على تنسيق bzip2 المجاني، مدعوم بواسطة lighttpd [ 7 ]
  • lzip– الضغط القائم على تنسيق lzip المجاني، المدعوم بواسطة wget [ 8 ] و Links [ 9 ]
  • lzma– الضغط القائم على (الخام) LZMA متاح في Opera 20، وفي elinks عبر خيار وقت الترجمة [ 10 ]
  • peerdist[ 11 ] – التخزين المؤقت واسترجاع محتوى نظير مايكروسوفت
  • rsync[ 12 ]ترميز دلتا في HTTP، يتم تنفيذه بواسطة زوج منrproxy.
  • xpress– بروتوكول ضغط مايكروسوفت المستخدم في نظام التشغيل ويندوز  8 والإصدارات الأحدث لتحديثات تطبيقات متجر ويندوز. يعتمد هذا البروتوكول على ضغط LZ77 ، مع إمكانية استخدام ترميز هوفمان. [ 13 ]
  • xz– ضغط المحتوى القائم على LZMA2، المدعوم بواسطة تصحيح غير رسمي لمتصفح Firefox؛ [ 14 ] ومطبق بالكامل في mget منذ 31-12-2013. [ 15 ]

الخوادم التي تدعم ضغط HTTP

كما تقوم العديد من شبكات توصيل المحتوى بتطبيق ضغط HTTP لتحسين سرعة توصيل الموارد للمستخدمين النهائيين.

يمكن أيضًا تحقيق الضغط في HTTP باستخدام وظائف لغات البرمجة النصية من جانب الخادم مثل PHP ، أو لغات البرمجة مثل Java .

تتوفر أدواتٌ عديدةٌ عبر الإنترنت للتحقق من صحة تطبيق ضغط HTTP. عادةً ما تطلب هذه الأدوات عدة نسخٍ من عنوان URL، لكلٍ منها رؤوس طلبٍ مختلفة (بمحتوى Accept-Encoding متفاوت). يُعتبر ضغط HTTP مُطبقًا بشكلٍ صحيحٍ عندما يُعيد الخادم مستندًا بتنسيقٍ مضغوط. [ 19 ] وبمقارنة أحجام المستندات المُعادة، يُمكن حساب نسبة الضغط الفعّالة (حتى بين خوارزميات الضغط المختلفة).

مشاكل تمنع استخدام ضغط HTTP

ذكرت مقالة نُشرت عام ٢٠٠٩ من قِبل مهندسي جوجل، أرفيند جاين وجيسون غلاسكو، أن أكثر من ٩٩ سنة عمل تُهدر يوميًا [ ٢٠ ] بسبب زيادة وقت تحميل الصفحات عندما لا يتلقى المستخدمون محتوى مضغوطًا. يحدث هذا عندما تتدخل برامج مكافحة الفيروسات في الاتصالات لإجبارها على أن تكون غير مضغوطة، وعند استخدام خوادم بروكسي (مع متصفحات ويب شديدة الحذر)، وعندما تكون الخوادم مُهيأة بشكل خاطئ، وعندما تمنع أخطاء المتصفح استخدام الضغط. كان متصفح إنترنت إكسبلورر ٦، الذي يتحول إلى بروتوكول HTTP ١.٠ (بدون ميزات مثل الضغط أو التجميع) عند استخدام خادم بروكسي  - وهو تكوين شائع في بيئات الشركات  - المتصفح الأكثر شيوعًا الذي يعود إلى بروتوكول HTTP غير المضغوط. [ ٢٠ ]

تتمثل إحدى المشكلات الأخرى التي وُجدت عند نشر ضغط HTTP على نطاق واسع في تعريف ترميز deflate : فبينما يُعرّف HTTP 1.1 ترميز deflate على أنه بيانات مضغوطة باستخدام deflate (RFC 1951) داخل دفق مُنسق بتنسيق zlib (RFC 1950)، فقد طبّقت منتجات خوادم وعملاء مايكروسوفت تاريخيًا هذا الترميز كدفق deflate "خام"، [ 21 ] مما يجعل نشره غير موثوق. [ 22 ] [ 23 ] ولهذا السبب، فإن بعض البرامج، بما في ذلك خادم Apache HTTP، لا تُطبّق سوى ترميز gzip .

الآثار الأمنية

يُتيح الضغط تنفيذ نوع من هجمات النص الصريح المُختار : فإذا تمكّن المهاجم من حقن أي محتوى مُختار في الصفحة، يُمكنه معرفة ما إذا كانت الصفحة تحتوي على هذا المحتوى من خلال مُلاحظة زيادة حجم البيانات المُشفّرة. إذا كانت الزيادة أقل من المُتوقع للحقن العشوائي، فهذا يعني أن برنامج الضغط قد وجد تكرارًا في النص، أي أن المحتوى المحقون يتداخل مع المعلومات السرية. هذه هي الفكرة الأساسية وراء برنامج CRIME.

في عام ٢٠١٢، أُعلن عن هجوم عام ضد استخدام ضغط البيانات، يُعرف باسم CRIME . ورغم أن هجوم CRIME كان فعالاً ضد عدد كبير من البروتوكولات، بما في ذلك بروتوكول TLS وبروتوكولات طبقة التطبيق مثل SPDY وHTTP، إلا أنه لم يتم إثبات سوى استغلال الثغرات في بروتوكولي TLS وSPDY، وتمت معالجة معظمها في المتصفحات والخوادم. أما استغلال CRIME لضغط HTTP فلم تتم معالجته على الإطلاق، على الرغم من تحذير مطوري CRIME من أن هذه الثغرة قد تكون أكثر انتشارًا من ضغط SPDY وTLS مجتمعين.

في عام 2013، نُشرت نسخة جديدة من هجوم CRIME ضد ضغط HTTP، أُطلق عليها اسم BREACH. يستطيع هجوم BREACH استخراج رموز تسجيل الدخول، وعناوين البريد الإلكتروني، أو غيرها من المعلومات الحساسة من حركة مرور الويب المشفرة باستخدام TLS في غضون 30 ثانية فقط (بحسب عدد البايتات المراد استخراجها)، شريطة أن يخدع المهاجم الضحية لزيارة رابط ويب خبيث. [ 24 ] جميع إصدارات TLS وSSL معرضة لخطر هجوم BREACH بغض النظر عن خوارزمية التشفير أو التشفير المستخدم. [ 25 ] على عكس النسخ السابقة من CRIME ، التي يمكن صدّها بنجاح عن طريق تعطيل ضغط TLS أو ضغط رأس SPDY، يستغل هجوم BREACH ضغط HTTP الذي لا يمكن تعطيله عمليًا، حيث تعتمد عليه جميع خوادم الويب تقريبًا لتحسين سرعات نقل البيانات للمستخدمين. [ 24 ]

اعتبارًا من عام 2016، أصبح هجوم TIME وهجوم HEIST معروفين للعامة. [ 26 ] [ 27 ] [ 28 ] [ 29 ]

مراجع

  1. "استخدام ضغط HTTP (IIS 6.0)" . شركة مايكروسوفت . تم الاطلاع عليه بتاريخ 9 فبراير 2010 .
  2. RFC 2616، القسم 3.5: "تعمل هيئة الأرقام المخصصة للإنترنت (IANA) كسجل لرموز قيمة ترميز المحتوى."
  3. 'RFC2616 "Transfer-Encoding: gzip, chunked" لم يتم التعامل معها بشكل صحيح' ، مشكلة كروميوم رقم 94730
  4. "معلمات بروتوكول نقل النص التشعبي - سجل ترميز محتوى HTTP" . هيئة الأرقام المخصصة للإنترنت (IANA ). تم الاطلاع عليه بتاريخ 18 أبريل 2014 .
  5. "اختبارات الضغط: النتائج" . شركة فيرف ستوديوز. مؤرشف من الأصل بتاريخ 21 مارس 2012. تم الاطلاع عليه بتاريخ 19 يوليو 2012 .
  6. "JSR 200: تنسيق نقل الشبكة لأرشيفات جافا" . برنامج عملية مجتمع جافا.
  7. "ModCompress - Lighttpd" . مختبرات لايتي . تم الاطلاع عليه بتاريخ 18 أبريل 2014 .
  8. "تم إصدار GNU Wget2 2.0.0" . تم الاطلاع عليه بتاريخ 14 مايو 2025 .
  9. "سجل تغييرات الروابط: دعم ضغط lzip" . تم الاطلاع عليه بتاريخ 22 يوليو 2025 .
  10. فك ضغط elinks LZMA
  11. " [ MS-PCCRTP ] : التخزين المؤقت للمحتوى واسترجاعه بين النظراء: امتدادات بروتوكول نقل النص التشعبي (HTTP)" . مايكروسوفت . تم الاطلاع عليه بتاريخ 19 أبريل 2014 .
  12. "rproxy: تعريف البروتوكول لترميز HTTP rsync" . rproxy.samba.org .
  13. " [ MS-XCA ] : خوارزمية ضغط Xpress" . تم الاطلاع عليه بتاريخ 29 أغسطس 2015 .
  14. "ضغط LZMA2 - موزيلا ويكي" . تم الاطلاع عليه بتاريخ 18 أبريل 2014 .
  15. "mget GitHub project page" . GitHub . تم الاطلاع عليه بتاريخ 6 يناير 2017 .
  16. "mod_deflate - خادم Apache HTTP الإصدار 2.4 - الترميزات المدعومة" .
  17. "جزء إضافي من دليل خادم الويب Hiawatha" . مؤرشف من الأصل بتاريخ 22-03-2016 . تم الاطلاع عليه بتاريخ 25-01-2012 .
  18. "تقديم الملفات الثابتة جزء من وثائق Armeria" . مؤرشف من الأصل بتاريخ 2020-04-02 . تم الاطلاع عليه بتاريخ 2020-01-16 .
  19. "كيف يعمل فحص ضغط gzip؟ "httptools.dev، تم استرجاعه في 10 أبريل 2022.
  20. 1 2 "استخدم الضغط لجعل الويب أسرع" . شركة جوجل . تم الاطلاع عليه بتاريخ 22 مايو 2013 .
  21. "deflate - لماذا تستخدم مواقع الويب الرئيسية gzip؟" . Stack Overflow . تم الاطلاع عليه بتاريخ 18 أبريل 2014 .
  22. "اختبارات الضغط: حول" . استوديوهات فيرف. مؤرشف من الأصل في 2 يناير 2015. تم الاسترجاع في 18 أبريل 2014 .
  23. "تخلص من الانتظار: ضغط HTTP" . أداء الويب من Zoompf . تم الاطلاع عليه بتاريخ 18 أبريل 2014 .
  24. 1 2 غودين، دان (1 أغسطس 2013). "اختفى في 30 ثانية: هجوم جديد يستخرج الأسرار من صفحات محمية ببروتوكول HTTPS" . آرس تكنيكا . كوندي ناست . تم الاطلاع عليه في 2 أغسطس 2013 .
  25. ليدن، جون (2 أغسطس 2013). "الدخول في الثغرة: هجوم جديد لقراءة بيانات الويب المشفرة" . ذا ريجستر . تم الاطلاع عليه في 2 أغسطس 2013 .
  26. سوليفان، نيك (11 أغسطس 2016). "الجريمة، والوقت، والاختراق، والسرقة: تاريخ موجز لهجمات أوراكل الضغط على بروتوكول HTTPS" . تم الاطلاع عليه بتاريخ 16 أغسطس 2016 .
  27. غودين، دان (3 أغسطس 2016). "استغلال ثغرة HEIST - هجوم جديد يسرق أرقام الضمان الاجتماعي وعناوين البريد الإلكتروني والمزيد من صفحات HTTPS" . تم الاطلاع عليه بتاريخ 16 أغسطس 2016 .
  28. بيري، تال. "جريمة كاملة؟ سيخبرنا الزمن" (ملف PDF) .
  29. فانهوف، ماثي. "السرقة: يمكن سرقة المعلومات المشفرة عبر بروتوكول HTTP من خلال نوافذ TCP" (PDF) .