nginx

2011-12-16 20 views
5

के माध्यम से एक खंडित अनुरोध कैसे करें ऐसा लगता है कि nginx chunked अनुरोधों का अच्छी तरह से समर्थन नहीं करता है। लेकिन मैं एक और निश्चित (और वर्तमान) उत्तर पाने की कोशिश कर रहा हूं। मेरे पास क्लाइंट जावा क्लाइंट से सर्वर पर एक SOAP अनुरोध कर रहा है जो शीर्षलेख Transfer-Encoding: chunked सेट करता है। जब मैं सीधे टॉमकैट पर अपने आवेदन से कनेक्ट होता हूं तो सभी ठीक काम करते हैं।nginx

लेकिन जब मैं उनके बीच nginx डालता हूं, तो चीजें तोड़ती हैं।

कुछ विवरण जोड़ने के लिए: मैं क्लाउडफाउंड्री के साथ काम कर रहा हूं। मैं माइक्रो क्लाउड फाउंड्री का उपयोग यह पुष्टि करने के लिए कर रहा हूं कि चीजें nginx की अनुपस्थिति में अपेक्षित काम करती हैं। लेकिन मेरी आवश्यकता क्लाउडफॉउंड्री डॉट कॉम का उपयोग करना है, इसलिए मेरे पास वहां nginx को बाईपास करने की क्षमता नहीं है।

This question and answer कहता है कि यह शायद मेरा एकमात्र कामकाज है: http://wiki.nginx.org/NginxHttpChunkinModule। लेकिन यह कामकाज उपलब्ध नहीं है, क्योंकि मैं cloudfoundry.com पर कॉन्फ़िगरेशन को संशोधित नहीं कर सकता।

This question इसी तरह दिखता है, लेकिन यह वास्तव में इस आवश्यकता के विपरीत को शामिल करता है। इसमें खंडित अनुरोधों के बजाय खंडित प्रतिक्रियाएं शामिल हैं।

तो क्लाइंट पर इस पर काम करने के लिए किसी भी बदलाव के बारे में कैसे? क्या हेडर के रूप में Transfer-Encoding: chunked और Content-Length: 123 दोनों भेजना संभव है? यह क्षेत्र मेरे लिए नया है, लेकिन यह अपाचे एचटीपी कॉम्पोनेंट्स जैसी परियोजनाओं से लगता है कि कोई भी लंबाई या चंकिंग सेट करेगा लेकिन दोनों नहीं। खंडन का मुद्दा यह है कि अनुरोध शुरू होने पर आपको लंबाई जानने की आवश्यकता नहीं है। क्या मैं अपने क्लाइंट को एचटीटीपी/1.0 का उपयोग करने के लिए बता सकता हूं और बिना किसी कंकड़ के nginx के साथ अच्छा खेल सकता हूं? क्या कोई अन्य कामकाज विचार है जिसे मैं भूल रहा हूं?

उत्तर

4

मैंने इस प्रश्न के सभी भागों के उत्तर एकत्र किए हैं।

बेस nginx खंडित अनुरोधों का समर्थन नहीं करता है (जैसा कि सिकंदर ने पुष्टि की है!)। Nginx NginXHttpCunkinModule (जैसा कि मेरे प्रश्न का उल्लेख है) का उपयोग करके खंडित अनुरोध का समर्थन कर सकता है। बेहतर: इस मॉड्यूल ने बीटा की स्थिति से 18 महीने पहले उत्पादन की गुणवत्ता में स्नातक की उपाधि प्राप्त की। बेस्ट: मैंने क्लाउडफाउंड्री इंजीनियरिंग टीम के कुछ सदस्यों के साथ हाल ही में meetup पर बात की; वे पुष्टि करते हैं कि इस मॉड्यूल को nginx के उनके संस्करण में जोड़ने की योजना है। समस्या सुलझ गयी। (ठीक है, यह पूरी अवधि में पूरी तरह से हल हो गया है। लेकिन हमारे पास इसकी अपेक्षा करने के लिए कोई सटीक तारीख नहीं है।)

इसलिए एक अल्पकालिक समाधान भी अच्छा होगा। मुझे एक मिला।

अलेक्जेंडर को निर्देशित मेरे प्रश्न का उत्तर देना: खंडित संदेशों के साथ "सामग्री-लंबाई" भेजना संभव नहीं है। यह वास्तव में खंडित संदेशों का बिंदु है: आप पूर्ण सामग्री रखने से पहले उन्हें भेजना शुरू कर देते हैं, ताकि आप संभवतः लंबाई को अभी तक नहीं जान सकें। इसलिए खंडित अनुरोधों से बचने का उनका विचार सही है। लेकिन अधिक व्यावहारिक होने के लिए मैं कहूंगा, "HTTP/1.1 के बजाय HTTP/1.0 का प्रयोग करें।" इसका खंडन संदेश भेजने का असर नहीं है। हम इस विचार का परीक्षण करने के लिए अस्थायी रूप से हमारे क्लाइंट को पैच करने में सक्षम थे। इसने काम कर दिया। लेकिन हम एक सार्वजनिक पैच रोल करने की योजना नहीं बनाते हैं। ऐसा लगता है कि इस स्थिति के लिए समस्या को हल करने के लिए हर कोई दस वर्षीय प्रोटोकॉल (और 10 साल पुरानी असमर्थित क्लाइंट लाइब्रेरी!) का उपयोग करने के लिए प्रतिकूल प्रतीत होता है।

इसके बजाय मैं आवश्यक होने पर हैक किए गए क्लाइंट का उपयोग करूंगा, अगर दूसरों को इसकी आवश्यकता हो तो मैं ईमेल कर दूंगा, और हम क्लाउडफाउंड्री को एचटीपीचंकिन और HTTP/1.1 में अद्यतन करने की प्रतीक्षा करेंगे।

2

Nginx वास्तव में खंडित अनुरोधों का समर्थन नहीं करता है। यह Content-Length शीर्षलेख की अनुपस्थिति में 411 Content Length required वापस करेगा।

चूंकि आप अपने क्लाइंट कोड को नियंत्रित कर रहे हैं, मुझे लगता है कि एकमात्र विकल्प है कि चुने गए अनुरोधों का उपयोग करने से बचें और Content-Length स्पष्ट रूप से निर्दिष्ट करें।

+0

क्या ट्रांसफर-एन्कोडिंग दोनों भेजना संभव है: खंडित और सामग्री-लंबाई: 123 हेडर के रूप में? क्या यह आम है? – mdahlman

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