2012-05-03 11 views
6

रेल 3 वर्तमान में मेलिंग मार्ग के लिए एक HEAD अनुरोध को रूट करता है। एक सिर है? अनुरोध पर विधि, लेकिन रिटर्न में झूठी और अनुरोध अनुरोध प्राप्त करने की तरह कार्य करता है। क्या मैं पता लगा सकता हूं कि अनुरोध एक हेड अनुरोध है या नहीं?रेल में हेड HTTP अनुरोध 3

तर्क: मुझे लगता है कि एक हेड अनुरोध को सटीक हेडर को वापस प्राप्त करना चाहिए, इसलिए रेल पूर्ण जीईटी करना चाहते हैं और फिर शरीर को दाढ़ी देना चाहते हैं। हालांकि, मैं वही डीबी कॉल जारी किए बिना इस अनुरोध के अनुरूप हो सकता हूं, जो कि जीईटी होगा। इसका कोई मतलब भी है क्या?

+0

आपको कुछ प्रासंगिक कोड पोस्ट करने की आवश्यकता हो सकती है। सिर? विधि HEAD अनुरोधों के लिए सच होनी चाहिए (http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-head-3F) – rjk

उत्तर

2

आप request.head का उपयोग कर सकते हैं? विधि पता लगाने के लिए अगर यह एक HEAD अनुरोध है:

http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-head-3F

एक बार जब आप निर्धारित किया है यह है कि, आप भी ठेठ के बजाय नियंत्रक के सिर (उपयोग कर सकते हैं) विधि प्रस्तुत करना:

http://guides.rubyonrails.org/layouts_and_rendering.html#using-head-to-build-header-only-responses

तो मैं बस अनुरोध की जांच करूँगा। डेटाबेस गतिविधियों के साथ परेशान करने से पहले। तब

head :ok, :custom_header => 'value' 
+0

तो, यहां कुछ [अधिक जानकारी] (https://gist.github.com/2594991) आप देख सकते हैं कि HEAD को मेरे रेल को प्राप्त करने के लिए भेजा जाता है, जिस बिंदु पर अनुरोध कहता है कि यह एक GET है। मैंने सिर की कोशिश की ?, लेकिन यह संकेत नहीं दे सकता कि यह एक हेड अनुरोध है। –

1
def index 
    if request.head? 
    head :created 
    else 
    Rails.logger.info "Derp #{request.method}" 
    end 
end 

हम्म का उपयोग करें। उपरोक्त नियंत्रक विधि काम करता है जैसे मैं रूबी v1.9.3-p194 और रेल v3.2.3 पर अपेक्षा करता हूं; HEAD अनुरोधों के लिए 201 के डब्ल्यू/ओ प्रतिक्रिया निकाय और 200 के डब्ल्यू/जीईटी के लिए।

+0

मैं 1.9.2 और रेल 3.1.4 पर हूं ... मैं कुछ गलत करने के लिए पूरी तरह से तैयार हूं। मुझे आगे की जांच करनी होगी ... धन्यवाद। –

+0

तो, मुझे लगता है कि असली जवाब यह है कि रेल एक ही कार्रवाई के माध्यम से हेड अनुरोध को मजबूर करता है जो जीईटी को संभालता है बी/सी को ईटीएजी उत्पन्न करना होता है। यदि हेड ने कुछ अलग किया है, तो यह क्लाइंट-साइड कैशिंग को तोड़ देगा (संभवतः)। इस प्रकार, सटीक कॉल जारी किए जाने हैं .... मुझे यह पसंद नहीं है कि मैं वास्तव में सिर का उपयोग नहीं कर सकता? यह जानने के लिए कि यह एक हेड अनुरोध है, लेकिन मैं (सोचता हूं) तर्क को समझता हूं। –

4

मुझे यह सही मुद्दा था। यह पता चला है कि कैशिंग सक्षम करने से इसका कारण बनता है। अपने पर्यावरण और #head में कैशिंग बंद करें? उम्मीद के रूप में काम करेंगे।

मुद्दा यह है कि रैक :: कैश हेड अनुरोधों को जीईटी अनुरोधों में बदल देता है ताकि उन्हें कैश किया जा सके। यह तर्कसंगत रूप से सही व्यवहार है, लेकिन यह मेरे आवेदन के साथ हस्तक्षेप किया।

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