سؤال

ماذا يعني رأس HTTP 1.1 التالي؟

إذا لم يكن المباراة: *

أنا أفهم ذلك عند استخدام ETAG قوي أو ضعيف أو حتى قائمة من etags ، لكنني لا أفهمها عند استخدام Star (*).

تعديل: سيكون من الجيد أن يكون لديك بعض الرمز الكاذب (رمز PHP جيد أيضًا) من شأنه أن يوضح كيف/ماذا يجب الإجابة على "إذا لم يكن المباراة: *".

هل كانت مفيدة؟

المحلول

الجواب هو، فإنه يعتمد.

لنفترض أننا تلقينا

If-None-Match: *
If-Modified-Since: <yesterday date>

وتم تغيير الصفحة اليوم.

أولاً ، نلقي نظرة على * الذي يخبرنا: "إرجاع 304 إذا كان المورد موجودًا والحالة (2) حسنًا ، يوجد المورد ، لكن الشرط (2) ينص على: "العودة فقط 304 ، إذا كان التاريخ متأخراً عن الحالي". لذلك لم يتم الوفاء بهذا الشرط ، وسيتم تسليم الصفحة بالكامل.

إذا لم نتلق If-Modified-Since, ، كان الاستجابة 304.

إذا لم يكن المورد موجودًا عند الطلب ، فقد قمنا بإرجاع الرمز المناسب (كما لو كان هناك لا If-None-Match).

يجب أن يتم إرجاع 304 فقط استجابة لطلبات Get and Head ، ويجب أن تكون جميع رؤوس الاستجابة المتعلقة بالتخزين المؤقت هناك. بالنسبة لجميع أنواع الطلبات الأخرى ، يحتاج الخادم الخاص بك إلى الرد على 412 (فشل الشرط المسبق).

اتمني ان يكون مفيدا ؛)

نصائح أخرى

نقلا عن RFC 2616 (HTTP 1.1):

... إذا تم إعطاء "*" ووجود أي كيان حالي لهذا المورد ، فيجب ألا يقوم الخادم بإجراء الطريقة المطلوبة ، ما لم يكن مطلوبًا القيام بذلك لأن تاريخ تعديل المورد يفشل في مطابقة ذلك المقدم حقل الرأس في الطلب.

يستمر RFC في القول إنه بدلاً من تنفيذ الطلب ، يجب أن تستجيب الخوادم بـ 304 (لم يتم تعديلها) لطلبات Get and Head ، وأنها يجب أن تستجيب بـ 412 (فشل الشرط المسبق) لجميع أنواع الطلبات الأخرى. ولكن هذا فقط إذا كان لدى الخادم بالفعل نسخة من المورد المطلوب. إذا لم يكن لديك أي كيانات ، فأنت ينبغي تعامل مع الطلب (ربما مع 404 لأنه ليس لديك أي شيء).

للتعامل مع الطلب ، اكتشف أولاً ما الذي سيفعله الخادم إذا كان هذا الرأس لم يكن كذلك الحالي. إذا كانت نتيجة هذا الطلب ليس يكون 2xx أو 304 ، ثم يقدم الطلب كالمعتاد. ولكن إذا كانت نتيجة الطلب سيكون يكون 2xx أو 304 ، ثم تعامل مع الحالة غير المعدلة. عندما يكون ذلك نجمًا ، ثم أعد 304 فورًا (ما لم تتفوق على IF-Podified-Since). إذا كانت علامات كيان واحدة أو أكثر ، فتحقق مما إذا كان أي من هذه العلامات يطابق علامة الشيء الذي كنت تخطط للخدمة كرد. إذا كان هناك أي مباراة ، فالتراجع 304 ؛ إذا لم يكن هناك تطابق ، فخدمها كما تفعل عادة.

في وقت لاحق في RFC ، هناك المزيد:

معنى "if-match: *" هو أنه يجب ألا يتم تنفيذ الطريقة إذا تم تحديد التمثيل بواسطة خادم Origin (أو عن طريق ذاكرة التخزين المؤقت ، ربما باستخدام آلية تختلف ، انظر القسم 14.44) موجود ، ويجب تنفيذها إذا لم يكن التمثيل موجودًا. تهدف هذه الميزة إلى أن تكون مفيدة في منع السباقات بين عمليات وضع.

أي أن النجم يسمح للعميل أن يقول ، "لا تضع هذا الملف إذا كان هناك أي نسخة من هذا الملف بالفعل هناك. "

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top