الضغط

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

معلومات عن الضغط

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

يتم ضبط الضغط باستخدام الحقل supportedCompressions وCompressionType. على العملاء استخدام نوعَي الضغط RICE وRAW. تستخدم ميزة "التصفّح الآمن" النوع COMPRESSION_TYPE_UNSPECIFIED عند عدم ضبط نوع الضغط (سيتم استبدال ضغط RAW).

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

ضغط الأرز

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

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

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

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

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

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

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

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

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

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

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

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

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

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