الضغط

ينطبق هذا المستند على الطريقة التالية: Update API (v4): threatListUpdates.fetch.

حول الضغط

يُعد الضغط ميزة أساسية في واجهات برمجة تطبيقات التصفح الآمن (الإصدار 4). يؤدي الضغط إلى الحد بشكل كبير من متطلبات معدل نقل البيانات، وهو تحديدًا، على سبيل المثال لا الحصر، ذو صلة بالأجهزة الجوّالة. يدعم خادم التصفح الآمن حاليًا ضغط الأرز. وقد تتم إضافة طرق ضغط إضافية في المستقبل.

يتم ضبط الضغط باستخدام الحقلين SupportedCompression وCompressionType. يجب أن يستخدم العملاء نوعي ضغط RICE وRAW. تستخدم ميزة التصفح الآمن النوع COMPRESSION_TYPE_UNSPECIFIED عند عدم ضبط نوع الضغط (سيتم استبدال ضغط RW).

سيستخدم خادم التصفح الآمن أيضًا ضغط HTTP القياسي لضغط الاستجابات بشكل أكبر، بغض النظر عن نوع الضغط المحدد، طالما أن العميل يحدد رأس ضغط HTTP الصحيح (اطلع على مقالة ويكيبيديا ضغط HTTP).

ضغط الأرز

وكما أشرنا، فإن خادم التصفح الآمن يدعم حاليًا ضغط الأرز (راجع مقالة Wikipedia ترميز Golomb لمناقشة كاملة حول تشفير Golomb-Rice).

الضغط/فك الضغط

يمثل الكائن RiceDeltaEncoding البيانات المرمّزة باستخدام RiceDeltaEncoding ويتم استخدامه لإرسال فهارس الإزالة المضغوطة أو بادئات التجزئة المضغوطة بحجم 4 بايت. (لن يتم ضغط بادئات التجزئة التي تزيد عن 4 بايت، وسيتم عرضها بتنسيق RAW بدلاً من ذلك.)

بالنسبة إلى فهارس الإزالة، يتم ترتيب قائمة الفهارس تصاعديًا ثم ترميز دلتا باستخدام ترميز RICE. بالإضافة إلى ذلك، تتم إعادة تفسير بادئات تجزئة 4 بايت كـ uint32s ذات النهايات الصغيرة، ويتم ترتيبها بترتيب تصاعدي ثم ترميز دلتا باستخدام ترميز RICE. يُرجى ملاحظة الفرق في تنسيق التجزئة بين ضغط RICE و RAW: يتم تجزئات قيم RAW الأولية، بينما يتم ترتيب قيم تجزئة الأرز بالترتيب التصاعدي (بعد فك الضغط).

وهذا يعني أنه سيتم ترميز قائمة الأعداد الصحيحة [1 و5 و7 و13] على أنها 1 (القيمة الأولى) ودلتا [4، 2، 6].

يتم تخزين القيمة الأولى في الحقل firstValue ويتم ترميز الدلتا باستخدام برنامج ترميز Golomb-Rice يتم تخزين معلمة الأرز k (انظر أدناه) في riceParameter. يحتوي الحقل numEntries على عدد الدلتا التي تم ترميزها في برنامج ترميز الأرز (3 في المثال أعلاه، وليس 4). يحتوي الحقل encodedData على الدلتا المشفرة الفعلية.

برنامج تشفير/برنامج ترميز

في برنامج ترميز/برنامج ترميز الأرز، يتم ترميز كل دلتا n على شكل q وr حيث n = (q<<k) + r (أو، n = q * (2**k) + r). وتكون k معلمة ومعلمة لبرنامج تشفير الأرز/برنامج فك التشفير. يتم تشفير القيمتين q وr في تدفق البت باستخدام أنظمة ترميز مختلفة.

يتم ترميز حاصل القسم q في ترميز أحادي متبوعًا بـ 0. بمعنى أنه سيتم ترميز الرقم 3 على النحو 1110، و4 كـ 11110، و4 على النحو 11111110. يتم فك ترميز حاصل القسم q أولاً.

يتم ترميز الجزء المتبقي r باستخدام التشفير الثنائي المقتطع. تتم كتابة وحدات البايت الأقل أهمية من r (أي التي تتم قراءتها) من تدفق بت. يتم فك ترميز r المتبقية بعد فك ترميز q.

برنامج تشفير/فك تشفير البت

يعتمد برنامج تشفير الأرز على برنامج تشفير/فك تشفير البت حيث يمكن إلحاق وحدات بت فردية إلى برنامج تشفير البت، أي تشفير حاصل القسمة الذي يمكن أن يبلغ طوله بت بت فقط.

يكون برنامج تشفير البت عبارة عن قائمة من وحدات البايت (8 بت). ويتم ضبط وحدات البت من أقل وحدة بت ذات أهمية في البايت الأول إلى أعلى وحدة بت ذات أهمية في البايت الأول. إذا كان قد سبق تعيين كل وحدات البت في كل وحدة بايت، تتم إضافة بايت جديد (تتم إعداده إلى صفر) بنهاية قائمة وحدات البايت. إذا لم يتم استخدام آخر بايت بالكامل، يتم ضبط وحدات البت العالية على صفر. مثال:

تمّت إضافة لقم برنامج تشفير BitEncoder بعد إضافة وحدات البت
[]
0 [00000000]
1 [00000010]
1 [00000110]
1،0، 1 [00101110]
0,0,0 [00101110, 00000000]
1،1،0 [00101110 و00000110]