القضبان التي لا معنى لها؟ طريقة LIPTEMAP دائما ترجع HTTP 200
-
09-09-2019 - |
سؤال
يستخدم تطبيق Ruby On Rails رمز التحكم التالي لإنشاء ملف Sitemap.xml:
class SitemapController < ApplicationController
layout nil
def index
headers['Content-Type'] = 'application/xml'
last_post = Post.last
if stale?(:etag => last_post, :last_modified => last_post.updated_at.utc)
respond_to do |format|
format.xml { @posts = Post.sitemap } # sitemap is a named scope
end
end
end
end
فهمي هو أن stale?
يجب أن تضمن الطريقة استجابة HTTP 304 غير المعدلة إذا لم يتغير المحتوى. ومع ذلك، كلما قمت باختبار هذا باستخدام Curl أو متصفح الويب، أحصل دائما على HTTP 200:
$ Curl - Curlhost: 3000 / sitemap.xml http / 1.1 200 اتصال موافق: تاريخ الإغلاق: Mon، 13 أبريل 2009 15:50:00 GMT آخر تعديل: الأربعاء، 08 أبريل 2009 16:52:07 GMT X- وقت التشغيل: 100 ETAG: "5FF2ED60DDCDCF291E7191E1AD540F6" Cache-Control: Private، Max-Age = 0، يجب إعادة التحقق من المحتوى: تطبيق / XML؛ Charset = utf-8 المحتوى طول: 29318
هل أنا أستخدم stale?
طريقة بشكل صحيح؟ هل من الممكن اختبار هذا محليا؟
المحلول
من المحتمل أن يكون رمز القضبان جيدا على ما يرام ولكن حليقة لا يرسل رأس if-mind - منذ أداء الاختبار الخاص بك. من حليقة مستندات:
الظروف الزمنية
يسمح HTTP للعميل بتحديد شرط وقت للوثيقة التي يطلبها. إنه إذا تم تعديله - منذ أو إذا لم يتم تحديده - منذ ذلك الحين. تتيح لك حليقة تحديدها بعلم -z / - Cond.
على سبيل المثال، يمكنك بسهولة إجراء تنزيل لا يتم إجراؤه فقط إذا كان الملف البعيد أحدث من نسخة محلية. سيصنع ذلك:
Curl -z local.html. http://remote.server.com/remote.html.
أو يمكنك تنزيل ملف فقط إذا كان الملف المحلي أحدث من جهاز التحكم عن بعد. قم بذلك عن طريق إعداد سلسلة التاريخ مع "-"، كما هو الحال في:
Curl -z -local.html. http://remote.server.com/remote.html.
يمكنك تحديد تاريخ "نص مجاني" كشرط. أخبر Curl بتنزيل الملف فقط إذا تم تحديثه منذ يوم أمس:
Curl -z أمس http://remote.server.com/remote.html.
ثم سيقبل حليقة مجموعة واسعة من تنسيقات التاريخ. يمكنك دائما إجراء تحديد التاريخ في الاتجاه الآخر عن طريق إبطاله باندفاع "-".