2010-06-25 7 views
11

का उपयोग कर मैं अपने नियंत्रक में एक तरीका है जिसके इस तरह send_data का उपयोग करता है:मैं किस तरह निर्धारित सीमा समाप्त होगी: हैडर जब send_data

def show 
    expires_in 10.hours, :public => true 
    send_data my_image_generator, :filename => "image.gif", :type => "image/gif" 
end 

हेडर में परिणाम expires_in का उपयोग करते हुए इस तरह भेजा जा रहा है:

HTTP/1.1 200 OK 
Connection: close 
Date: Fri, 25 Jun 2010 10:41:22 GMT 
ETag: "885d75258e9306c46a5dbfe3de44e581" 
Content-Transfer-Encoding: binary 
X-Runtime: 143 
Content-Type: image/gif 
Content-Disposition: inline; filename="image.gif" 
Content-Length: 1277 
Cache-Control: max-age=36000, public 

मैं उपयोगकर्ता एजेंट को पुनर्वितरण से रखने के लिए Expires: (some exact date) जैसे शीर्षलेख जोड़ना चाहता हूं। लेकिन मुझे नहीं लगता कि send_data को हेडर सेट करने का तरीका कैसे बनाया जाए?

मुझे लगता है कि मैं इसे response.headers हैश में स्पष्ट रूप से सेट कर सकता हूं, लेकिन निश्चित रूप से उस (या कुछ) के लिए एक रैपर होना चाहिए?

उत्तर

10

जाहिर send_data को समाप्त हो रहा है पारित करने के लिए कोई रास्ता नहीं होने के लिए वहाँ लगता है - के बजाय आप इसे खुद response.headersऔर में सेट करना होगा उचित रूप से तिथि स्वरूपण की देखभाल:

response.headers["Expires"] = CGI.rfc1123_date(Time.now + period) 

ध्यान दें कि में max-age निर्देश Cache-Control हेडर मौजूद होने पर Expires शीर्षलेख को ओवरराइड करता है। अधिक जानकारी के लिए RFC2616 Section 14.9.3 देखें।

27

मैं इस वाक्य रचना में आए और मुझे यह पसंद है :-)

response.headers["Expires"] = 1.year.from_now.httpdate 
+2

: पी – conny

+0

डाल करो कि send_data के पहले या बाद में? – 0112

+0

'send_data' से पहले जोड़ें; एक बार 'send_data' कहा जाता है, हेडर सेट करने के लिए व्यर्थ है। – Abdo

3

अपने प्रश्न में कोड वास्तव में हाल ही में रेल पर काम करना चाहिए: बहुत कूलर है कि

`expires_in 10.hours, :public => true` 
+4

क्या यह वही नहीं है जो पूछताछ अपने मूल कोड में करता है? – bredikhin

+0

असल में मैंने पाया कि यह रेल 4.2 पर काम करता है, शायद रेल ने एक बग तय किया है? बस एक ही विधि में सेट किए जा रहे किसी मैनुअल हेडर से बचने के लिए सुनिश्चित रहें। इसे आपको सार्वजनिक रूप से घोषित करने का अतिरिक्त लाभ है। – mahemoff

संबंधित मुद्दे