HTTP: ईटीएजी हैडर उत्पन्न करना

मैं संसाधन फ़ाइल के लिए एक ईटीएजी HTTP शीर्षलेख कैसे उत्पन्न करूं?

0
ro fr bn

6 उत्तर

एक etag एक मनमानी स्ट्रिंग है जो सर्वर क्लाइंट को भेजता है कि अगली बार फ़ाइल अनुरोध होने पर क्लाइंट सर्वर पर वापस भेज देगा।

Etag फ़ाइल पर आधारित सर्वर पर computable होना चाहिए। चेकसम की तरह सॉर्ट करें, लेकिन हो सकता है कि आप इसे भेजने वाली हर फ़ाइल को जांचना न चाहें।

 server                client

        <------------- request file foo

 file foo etag: "xyz"  -------->

        <------------- request file foo
                       etag: "xyz" (what the server just sent)

 (the etag is the same, so the server can send a 304)

मैंने "फ़ाइल इनोड नंबर / डेटास्टैम्प / फ़ाइल आकार" प्रारूप में एक स्ट्रिंग बनाई है। इसलिए, यदि क्लाइंट को सेवा के बाद सर्वर पर एक फ़ाइल बदल दी गई है, तो क्लाइंट फिर से अनुरोध करने पर नया पुनर्जन्मित ईटाग मेल नहीं करेगा।

char *mketag(char *s, struct stat *sb)
{
    sprintf(s, "%d/%d/%d", sb->st_ino, sb->st_mtime, sb->st_size);
    return s;
}
0
जोड़ा
मेरे मामले में, ऐसा इसलिए है क्योंकि यह एक सीजीआई कार्यक्रम से एक गणना पथ था। आप सही हैं कि प्रत्यक्ष पथ के मामले में कि एमटा शायद पर्याप्त होगा। चूंकि लागत मुख्य रूप से स्टेट() में होने जा रही है, इसलिए इनोड और आकार को शामिल करने के लिए कोई अतिरिक्त शुल्क नहीं है, जो कि (काफी संभावना नहीं है), जहां एक दुष्ट व्यवस्थापक फ़ाइल को अपडेट कर सकता है और इसे वापस स्पर्श कर सकता है मूल mtime।
जोड़ा लेखक Mark Harrison, स्रोत
@MarkHarrison, आपको इटाग के चारों ओर डबल कोट्स की आवश्यकता क्यों है? क्या यह वाक्यविन्यास का एक अनिवार्य हिस्सा है?
जोड़ा लेखक Pacerier, स्रोत
यदि mtime वह समय है जब फ़ाइल आखिरी बार बदल दी गई थी, तो आकार और इनोड का उद्देश्य क्या है?
जोड़ा लेखक Steve, स्रोत

मैं उन्हें उपयोग करने और इसके बजाय अंतिम संशोधित शीर्षलेखों के लिए जाने की सलाह नहीं दूंगा।

Askapache इस पर एक उपयोगी लेख है। (जैसा कि वे ऐसा लगता है सब कुछ बहुत कुछ करता है!)

http://www.askapache.com/htaccess/apache-speed-etags। एचटीएमएल

0
जोड़ा
हम्म, यह शर्म की बात है, आशा है कि वे जल्द ही वापस आ जाएंगे क्योंकि साइट सलाह की सुनहरी थी!
जोड़ा लेखक Rich Bradshaw, स्रोत
जोड़ा लेखक buhtz, स्रोत
लिंक अब बैक अप है।
जोड़ा लेखक Marius Gedminas, स्रोत
@RichBradshaw सिर्फ एक सवाल है, हम संसाधन के अंतिम संशोधित टाइमस्टैम्प को कैसे जान सकते हैं? क्या यह डीबी परिवर्तन इतिहास के माध्यम से जाने के बाद पूरी तरह से एक मैनुअल ऑपरेशन है? या क्या कोई स्वचालित तरीके हैं?
जोड़ा लेखक Supun Wijerathne, स्रोत
askapache लिंक टूटा हुआ है
जोड़ा लेखक bskinnersf, स्रोत

http://developer.yahoo.com/performance/rules.html#etags:

डिफ़ॉल्ट रूप से, इटाग में अपाचे और आईआईएस एम्बेड डेटा दोनों जो कई सर्वरों के साथ वेब साइटों पर सफल होने वाले वैधता परीक्षण की बाधाओं को नाटकीय रूप से कम कर देता है।

     

...

     

यदि आप ईटैग प्रदान करने वाले लचीले सत्यापन मॉडल का लाभ नहीं उठा रहे हैं, तो ईटीएजी को पूरी तरह से निकालना बेहतर होगा।

0
जोड़ा

जब भी संसाधन प्रतिनिधित्व बदलता है, तब तक यह बदलता है, आप इसे कैसे तैयार करते हैं, यह पूरी तरह से आपके ऊपर है।

आपको इसे इस तरह से तैयार करने की कोशिश करनी चाहिए कि अतिरिक्त रूप से:

  1. आपको प्रत्येक सशर्त जीईटी पर पुन: गणना करने की आवश्यकता नहीं है, और
  2. संसाधन सामग्री परिवर्तित नहीं हुई है
  3. नहीं बदलती है

सामग्री के हैंश का उपयोग करके आप # 1 पर असफल हो सकते हैं यदि आप फ़ाइलों के साथ गणना किए गए हैंश को स्टोर नहीं करते हैं।

यदि आप अपने फाइल सिस्टम को पुनर्व्यवस्थित करते हैं या आप एकाधिक सर्वर से सामग्री की सेवा करते हैं तो इनोड संख्याओं का उपयोग करने से आप # 2 पर असफल हो सकते हैं।

एक तंत्र जो काम कर सकता है वह पूरी तरह से सामग्री निर्भर करता है जैसे कि SHA-1 हैश या संस्करण स्ट्रिंग, जब भी आपकी संसाधन सामग्री बदल जाती है, गणना की जाती है और संग्रहीत होती है।

0
जोड़ा

बैश में डिफ़ॉल्ट अपाचे एटैग कैसे उत्पन्न करें

for file in *; do printf "%x-%x-%x\t$file\n" `stat -c%i $file` `stat -c%s $file` $((`stat -c%Y $file`*1000000)) ; done

यहां तक ​​कि जब मैं एटैग की तरह कुछ ढूंढ रहा था (ब्राउज़र केवल फाइल के लिए पूछता है अगर यह सर्वर पर बदल गया है), यह कभी काम नहीं करता है और मैंने एक जीईटी चाल का उपयोग समाप्त कर दिया है (जेएस फाइलों के लिए तर्क प्राप्त करने के रूप में टाइमस्टैंप जोड़ना )।

0
जोड़ा

मैं एडलर -32 का उपयोग एक HTML लिंक शॉर्टनर के रूप में कर रहा हूं। मुझे यकीन नहीं है कि यह एक अच्छा विचार है, लेकिन अब तक, मैंने किसी भी डुप्लिकेट को देखा है। यह एक ईटैग जनरेटर के रूप में काम कर सकता है। और यह तेजी से होना चाहिए, फिर शाह की तरह एन्क्रिप्शन योजना का उपयोग करके हैश की कोशिश कर रहा है, लेकिन मैंने इसे सत्यापित किया है। मैं जिस कोड का उपयोग करता हूं वह है:

 shortlink = str(hex(zlib.adler32(link)+(2**32-1)/2))[2:-1]
0
जोड़ा