शीर्षक सुंदर आत्म-व्याख्यात्मक है। क्या हेडर प्राप्त करने का कोई तरीका है (Rack::Request.env[]
को छोड़कर)?रैक :: अनुरोध - मैं सभी शीर्षलेख कैसे प्राप्त करूं?
उत्तर
HTTP हेडर Rack environment अपने अनुप्रयोग के लिए पारित में उपलब्ध हैं:
HTTP_
चर: ग्राहक की आपूर्ति HTTP अनुरोध हेडर के लिए इसी चर (जैसे कि, चर जिनके नाम HTTP_ के साथ शुरू)। इन चरों की उपस्थिति या अनुपस्थिति अनुरोध में उपयुक्त HTTP शीर्षलेख की उपस्थिति या अनुपस्थिति से मेल खाना चाहिए।
तो HTTP शीर्षलेख "HTTP_" के साथ उपसर्ग किए गए हैं और हैश में जोड़े गए हैं।
require 'rack'
app = Proc.new do |env|
headers = env.select {|k,v| k.start_with? 'HTTP_'}
.collect {|key, val| [key.sub(/^HTTP_/, ''), val]}
.collect {|key, val| "#{key}: #{val}<br>"}
.sort
[200, {'Content-Type' => 'text/html'}, headers]
end
Rack::Server.start :app => app, :Port => 8080
के रूप में Chrome या Firefox के द्वारा दिखाया जब मैं इस चलाने के लिए, HTTP हेडर के अलावा, वहाँ एक "संस्करण: HTPP/1.1" है:
यह एक छोटा सा कार्यक्रम है कि अलग करता है और उन्हें प्रदर्शित करता है (यानी कुंजी "HTTP_VERSION" और मान "HTTP/1.1" के साथ एक प्रविष्टि env हैश में जोड़ा जा रहा है)।
@ मैट के जवाब के आधार पर है, लेकिन यह वास्तव में के रूप में प्रश्न में अनुरोध आप हैश पर अनुरोध हेडर देता है:
headers = Hash[*env.select {|k,v| k.start_with? 'HTTP_'}
.collect {|k,v| [k.sub(/^HTTP_/, ''), v]}
.collect {|k,v| [k.split('_').collect(&:capitalize).join('-'), v]}
.sort
.flatten]
पर निर्भर करता है क्या महत्वपूर्ण सम्मेलन आप और के बजाय पसंद करते हैं आप कुछ का उपयोग करना चाहें : भुनाने।
आह, तो यह मूल रूप से 'env' वैसे भी है :)। जो कुछ नापसंद है वह कुछ वर्णों के साथ उत्थान वाले नाम हैं। खैर, मुझे लगता है कि मुझे इससे दूर जाना होगा .... – PJK
@PJK अच्छी तरह से नाम केस असंवेदनशील होना चाहिए: http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4। 2। क्या पात्रों को प्रतिस्थापित किया जा रहा है? क्या आप ASCII chracter सेट के बाहर से वर्णों का उपयोग करने की कोशिश कर रहे हैं? शीर्षलेख नाम केवल ASCII होना चाहिए। – matt
मुझे पता है, यह केवल सुविधा का मामला है ... उदाहरण के लिए, एक्स-बिल्ड HTTP_X_BUILD बन जाता है, जिसका अर्थ है X_Build और X-BUILD बराबर होना चाहिए लेकिन (मुझे बताया गया है) ब्राउज़र इन दो विकल्पों के बीच अंतर करते हैं। – PJK