التفاوض على المحتوى
| HTTP |
|---|
| طرق الطلب |
| حقول الرأس |
| رموز حالة الاستجابة |
| طرق التحكم في الوصول الأمني |
| الثغرات الأمنية |
يشير مصطلح التفاوض على المحتوى إلى الآليات المحددة كجزء من HTTP والتي تجعل من الممكن تقديم إصدارات مختلفة من مستند (أو بشكل عام، تمثيلات لمورد) في نفس URI ، بحيث يمكن لوكلاء المستخدم تحديد الإصدار الذي يناسب قدراتهم بشكل أفضل. أحد الاستخدامات الكلاسيكية لهذه الآلية هو تقديم صورة بتنسيق GIF أو PNG ، بحيث يتم تقديم إصدار GIF للمتصفح الذي لا يمكنه عرض صور PNG (مثل MS Internet Explorer 4).
قد يتوفر المورد بعدة أشكال مختلفة؛ على سبيل المثال، قد يتوفر بلغات مختلفة أو أنواع وسائط مختلفة. إحدى الطرق لاختيار الخيار الأنسب هي إعطاء المستخدم صفحة فهرس والسماح له باختيار الخيار الأنسب؛ ومع ذلك، غالبًا ما يكون من الممكن أتمتة الاختيار بناءً على بعض معايير الاختيار.
الآليات
يوفر HTTP العديد من آليات التفاوض على المحتوى المختلفة بما في ذلك: التي يتم تشغيلها بواسطة الخادم (أو الاستباقية)، والتي يتم تشغيلها بواسطة الوكيل (أو التفاعلية)، والشفافة، و/أو مجموعات مختلطة منها.
يتم تشغيله بواسطة الخادم
تتم عملية التفاوض على المحتوى بواسطة الخادم أو بشكل استباقي من خلال خوارزميات على الخادم تختار من بين التمثيلات المتنوعة الممكنة. ويتم ذلك عادةً بناءً على معايير القبول التي يوفرها وكيل المستخدم.
لتلخيص كيفية عمل ذلك، عندما يرسل وكيل المستخدم طلبًا إلى خادم، يُعلم وكيل المستخدم الخادم بأنواع الوسائط أو الجوانب الأخرى لعرض المحتوى التي يفهمها مع تقييمات لمدى فهمه لها. وبشكل أكثر دقة، يوفر وكيل المستخدم رؤوس HTTP التي تسرد الجوانب المقبولة للمورد وعوامل الجودة الخاصة بها. بعد ذلك، يتمكن الخادم من توفير إصدار المورد الذي يناسب احتياجات وكيل المستخدم على أفضل وجه.
على سبيل المثال، يمكن للمتصفح أن يشير إلى أنه يرغب في الحصول على معلومات باللغة الألمانية عن طريق تعيين Accept-Languageمثل هذا:
Accept-Language: de
قد يقول المتصفح بدلاً من ذلك أن اللغة الألمانية هي المفضلة، إذا كان ذلك ممكنًا، ولكن اللغة الإنجليزية مقبولة أيضًا من خلال الإعداد:
Accept-Language: de; q=1.0, en; q=0.5
حيث أن عامل الجودة "q" في اللغة الألمانية أعلى منه في اللغة الإنجليزية.
غالبًا ما يتم توفير رؤوس HTTP متعددة معًا لتنسيق المحتوى أو، على وجه التحديد، نوع الوسائط واللغة وبعض الجوانب الأخرى للمورد. بالإضافة إلى Acceptالرأس المستخدم بشكل شائع لنوع الوسائط، Accept-Languageوالرأس للتفاوض على اللغة، يصف RFC 7231 أيضًا Accept-Charset& Accept-Encodingsلترميزات الأحرف وترميزات المحتوى (الضغط) على التوالي.
مثال على طلب أكثر تعقيدًا هو عندما يرسل المتصفح عناوين حول اللغة تشير إلى أن اللغة الألمانية مفضلة ولكن اللغة الإنجليزية مقبولة، كما هو مذكور أعلاه، وأنه فيما يتعلق بالتنسيقات، فإن HTML ( text/html) مفضلة على أنواع النصوص الأخرى ( text/*) أو صور GIF ( image/gif) أو JPEG ( image/jpg) مفضلة على تنسيقات الصور الأخرى ( image/*) ولكن أي نوع آخر من الوسائط ( */*) مقبول كملاذ أخير:
قبول اللغة: de ; q=1.0 , en; q=0.5
قبول: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
بالإضافة إلى جوانب التفاوض على المحتوى الذي يتم تشغيله بواسطة الخادم حسب نوع المحتوى واللغة المحددة في RFC 7231 ، هناك امتدادات تحدد جوانب أخرى للتفاوض على المحتوى، مثل Memento الذي يصف استخدام Accept-Datetimeرأس لاسترداد نسخة من تمثيل المورد في نقاط معينة في الوقت [1] وتفاوض المحتوى الخاص بـ IETF/W3C حسب الملف الشخصي [2] والذي يصف استخدام Accept-Profileرأس لاسترداد تمثيلات الموارد المتوافقة مع ملفات تعريف البيانات.
لا يحدد RFC 7231 ولا المواصفات الأحدث ذات الصلة مثل Content Negotiation by Profile [2] كيفية حل التنازلات في الحالات التي تحدد فيها الرؤوس المختلفة متطلبات متضاربة، كما هو الحال في المثال أعلاه، الاختيار بين صفحة HTML باللغة الإنجليزية وصورة GIF باللغة الألمانية.
مُدار بواسطة العميل
يتم تنفيذ عملية التفاوض على المحتوى الذي يحركه العميل أو المحتوى التفاعلي من خلال خوارزميات في وكيل المستخدم والتي تختار من بين التمثيلات المتنوعة المحتملة. يتم تنفيذ ذلك عادةً بناءً على قائمة التمثيلات والبيانات الوصفية التي يوفرها الخادم.
لتلخيص كيفية عمل هذا، عندما يرسل وكيل المستخدم طلبًا إلى خادم، يُعلم الخادم وكيل المستخدم بالتمثيلات المتاحة لديه بالإضافة إلى أي بيانات وصفية لديه حول كل تمثيل (على سبيل المثال، نوع المحتوى والجودة واللغة وما إلى ذلك). ثم يعيد وكيل المستخدم إرسال الطلب إلى عنوان URL محدد للتمثيل المختار. يمكن اختيار هذا تلقائيًا بواسطة وكيل المستخدم أو يمكن لوكيل المستخدم تقديم الخيارات للمستخدم ويمكن للمستخدم اختيارها مباشرة. بتعبير أدق، يستجيب الخادم إما بـ 300 خيار متعدد أو 406 غير مقبول (عندما يتم توفير معايير قبول وكيل المستخدم التي يقودها الخادم ولكن لا يمكن للخادم إجراء اختيار تلقائيًا). لسوء الحظ، يترك HTTP تنسيق قائمة التمثيلات والبيانات الوصفية جنبًا إلى جنب مع آليات الاختيار غير محدد.
مراجع
- ^ Memento: إضافة الوقت إلى الويب. Mementoweb.org. تم الاسترجاع في 2013-09-08.
- ^ "اتحاد شبكة الويب العالمية (W3C)، "التفاوض على المحتوى حسب الملف الشخصي"، مسودة عمل W3C، 26 نوفمبر 2019".
روابط خارجية
- RFC 7231 — بروتوكول نقل النص التشعبي (HTTP/1.1): الدلالات والمحتوى – (القسم 5.3: التفاوض على المحتوى)
- RFC 2295 — التفاوض على المحتوى الشفاف في HTTP
- RFC 2296 — خوارزمية اختيار المتغيرات عن بعد عبر HTTP — RVSA/1.0
- التفاوض على محتوى Apache
- مكتبة تفاوض على محتوى PHP مفتوحة المصدر (تدعم الأحرف البدل وقيم q)
- مناقشة حول تقديم XHTML مع التفاوض على المحتوى ومخاوف المتصفح التي تتطلب ذلك
- تعتمد هذه المقالة جزئيًا على هذه الصفحة المؤرشفة في 2014-11-15 على موقع Wayback Machine ، والتي تخضع لحقوق الطبع والنشر لمؤسسة Apache Foundation ولكنها صدرت بموجب ترخيص مجاني.
