http

2011-11-19 12 views
23

मैं सबसे अच्छा तरीका है पर सुझाव के लिए देख रहा हूँ से अधिक बाइनरी डेटा भेजा जा रहा है,/एक दूरस्थ जीपीआरएस डिवाइस से डेटा प्राप्त भेजने के लिए पोर्ट पर 80http

एक यादृच्छिक बंदरगाह ठीक काम करता है पर एक सादे TCP सॉकेट बनाना है, लेकिन कई वाहक केवल अपने प्रॉक्सी के माध्यम से पोर्ट 80 HTTP यातायात की अनुमति देते हैं, और फिर HTTP एएससीआई डेटा की अपेक्षा करते हैं (जिसके लिए वे हेडर को आवश्यकतानुसार संशोधित कर सकते हैं।

तो, क्या मेरा डिवाइस लगातार HTTP कनेक्शन पर POST अनुरोध बनाना चाहिए, और उसके बाद बेस 64 एन्कोडेड प्रतिक्रिया वेब सेवा से? मुझे यकीन नहीं है कि बाइनरी डेटा शामिल होने पर मोबाइल प्रॉक्सी कैसे व्यवहार करते हैं। क्या ऐसा करने का कोई अनुशंसित तरीका है?

मैं डिवाइस के फर्मवेयर और सर्वर साइड ऐप दोनों को अनुकूलित कर सकता हूं।

[संपादित करें]

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

मोबाइल आईएसपी, हालांकि, केवल पोर्ट 80 के लिए अपनी "डेटा योजनाओं" को सीमित करते हैं। वे HTTP शीर्षकों के साथ गड़बड़ी की स्वतंत्रता भी लेते हैं, और संभावित रूप से HTML डेटा स्वयं भी। यह वह जगह है जहां मुझे संभावित नुकसान और उन्हें रोकने के तरीकों की पहचान करने की आवश्यकता है।

  • बस बेस 64 एन्कोडेड डेटा काम भेज देगा?
  • HTTP सत्र कैसे प्रबंधित किए जाते हैं? अनियंत्रित सॉकेट को लंबे समय तक जीवित रखा जा सकता है, लेकिन HTTP क्रियाएं आमतौर पर कम रहती हैं। क्या इसका मतलब है कि मुझे डेटा के प्रत्येक पैकेट के लिए एक नया कनेक्शन बनाना होगा? या एक कनेक्शन पर, सर्वर में सर्वर प्रतिक्रिया भेजने का कोई तरीका है?
  • डेटा के साथ आईएसपी प्रॉक्सी गड़बड़ किस तरीके से हो सकता है, या हेडर? उदाहरण के लिए, एक प्रॉक्सी कभी-कभी कनेक्शन को जीवित रख सकता है, भले ही सर्वर इसे बंद कर देता हो।

उत्तर

33

बस बेस 64 एन्कोडेड डेटा काम भेज देगा?

बेस 64 एन्कोडिंग का उपयोग करने की कोई आवश्यकता नहीं है - इससे आपको बाइट्स की संख्या में आसानी से स्थानांतरित करना होगा। मोबाइल ऑपरेटर आमतौर पर उन सामग्री प्रकारों के जवाबों को जोड़ते हैं जिन्हें वे समझते हैं - यानी छवियां, स्टाइलशीट इत्यादि

HTTP सत्र कैसे प्रबंधित किए जाते हैं?

HTTP सत्र आमतौर पर या तो URL क्वेरी पैरामीटर या कुकी मान के माध्यम से संभाले जाते हैं। हालांकि, आपने जो कहा है उससे यह सत्र की तरह नहीं लगता है।

अनियंत्रित सॉकेट लंबे समय तक जीवित रखा जा सकता है, लेकिन HTTP क्रियाएं आमतौर पर कम रहती हैं। क्या इसका मतलब है कि मुझे डेटा के प्रत्येक पैकेट के लिए एक नया कनेक्शन बनाना होगा?

HTTP अनुरोध कच्चे टीसीपी सॉकेट के लिए मनमाने ढंग से लंबे समय तक चल सकते हैं। यदि आवश्यक हो तो एक जीईटी अनुरोध घंटों तक टिक सकता है।आपको प्रत्येक अनुरोध के लिए नया कनेक्शन बनाने की आवश्यकता नहीं है — Connection: Keep-Alive HTTP शीर्षलेख पर नज़र डालें।

या एक कनेक्शन पर, सर्वर में सर्वर प्रतिक्रिया भेजने का कोई तरीका है?

यदि आप प्रतिक्रिया की लंबाई नहीं जानते हैं तो आप या तो सामग्री-लंबाई शीर्षलेख को छोड़ सकते हैं या, अधिमानतः Transfer-Encoding: chunked HTTP शीर्षलेख का उपयोग कर सकते हैं।

डेटा के साथ आईएसपी प्रॉक्सी गड़बड़ किस तरीके से हो सकता है या हेडर? उदाहरण के लिए, एक प्रॉक्सी कभी-कभी कनेक्शन को जीवित रख सकता है, भले ही सर्वर इसे बंद कर देता हो।

आईएसपी HTTP प्रतिक्रियाओं में किए गए परिवर्तनों को प्रकट नहीं करते हैं। यदि आप इस बारे में चिंतित हैं तो एक सरल समाधान डेटा को एन्क्रिप्ट करना होगा और Content-Encoding HTTP शीर्षलेख निर्दिष्ट करना होगा। इसके लिए आपको HTTP क्लाइंट और सर्वर दोनों को नियंत्रित करने की आवश्यकता होगी।

+0

+1 धन्यवाद। एक छोटा सा स्पष्टीकरण: * मोबाइल ऑपरेटर आमतौर पर उन सामग्री प्रकारों के जवाबों की उलझन को सीमित करते हैं जिन्हें वे समझते हैं * - क्या इसका मतलब है कि मुझे एक सामग्री प्रकार का उपयोग करना चाहिए जिसे वे ** नहीं समझते हैं? – Groo

+1

मोबाइल ऑपरेटरों द्वारा किए गए परिवर्तन आम तौर पर मीडिया-प्रकारों के लिए होते हैं जहां उन्हें पता चलता है कि 'समकक्ष' प्रतिक्रिया वापस की जा सकती है। उदाहरण एक जेपीईजी छवि का संपीड़न या एक HTML फ़ाइल में सीएसएस/जावास्क्रिप्ट की इनलाइनिंग होगी। यदि आप मालिकाना प्रारूप में डेटा भेज रहे हैं तो आप मीडिया-प्रकार जैसे 'application/vnd.company-name' का उपयोग करेंगे।फ़ाइल-प्रकार' - मध्यस्थों द्वारा इसे बदलने की संभावना नहीं है क्योंकि वे प्रारूप को समझ नहीं पाते हैं। – johnstok

+0

@johnstok सामग्री-लंबाई शीर्षलेख बाइट्स में किसी भी डेटा की लंबाई निर्दिष्ट करता है। तो, इस पर ध्यान दिए बिना कि डेटा मानकों के अनुरूप या स्वामित्व है, ऑपरेटर केवल उन बाइट्स को आगे बढ़ा सकते हैं। – ardsrk

14

यदि संभव हो, तो आप डेटा को HTTP अनुरोध और प्रतिक्रियाओं के रूप में भेज सकते हैं।

HTTP बाइनरी डेटा को संभालने में पूरी तरह से सक्षम है: छवियों को हर समय HTTP पर भेजा जाता है, और वे बाइनरी होते हैं। लोग बिना किसी समस्या के मनमाने ढंग से डेटा प्रकारों की फ़ाइलों को अपलोड और डाउनलोड करते हैं।

बस इसे "एप्लिकेशन/ऑक्टेट-स्ट्रीम" का एक माइम प्रकार दें - जो मूल रूप से बाइनरी डेटा के लिए एक सामान्य माइम प्रकार है, जिसमें कोई और विनिर्देश नहीं है - और किसी भी प्रॉक्सी को अकेले छोड़ देना चाहिए ।

-2

मैं एक एसओएपी webservice की सिफारिश करता हूं। यह एक्सएमएल पैरामीटर युक्त एक POST अनुरोध स्वीकार करता है। SOAP/XML पर बाइनरी डेटा भेजने का एक मानक तरीका है। हम एसओएपी पर बाइट [] परिवहन के लिए हर समय ऐसा करते हैं।

अपने डबल्यूएसडीएल में, इस प्रकार के होने के लिए अपने क्षेत्र घोषित:

<xs:element name="myByteArrayFieldName" type="xs:base64Binary"/>

हम एक जावा की दुकान कर रहे हैं और हम JAXB/CXF का उपयोग करें और जावा वस्तुओं से मक्खी पर डबल्यूएसडीएल उत्पन्न करते हैं। JAXB स्वचालित रूप से बाइट [] से xs: base64Binary से अनुवाद को संभालता है, इसलिए आपको यह जानने की भी आवश्यकता नहीं है कि आपका डेटा बेस 64 के रूप में एन्कोड किया जा रहा है!

एसओएपी सेवाओं में सत्र नहीं हैं, इसलिए आपको http सत्रों के बारे में चिंता करने की आवश्यकता नहीं है। यह संभवतः एक नया कनेक्शन बनाएगा, लेकिन मैं केवल इसके बारे में चिंता करता हूं अगर वास्तव में इसमें कोई समस्या है। चूंकि यह सत्र सत्र के साथ एक POST अनुरोध है, मुझे संदेह है कि आईएसपी इसके साथ गड़बड़ करेगा। आप सुनिश्चित करने के लिए हमेशा HTTPS का उपयोग कर सकते हैं। एक जीपीआरएस लिंक पर जो कनेक्ट/डिस्कनेक्ट हो जाएगा, मैं सॉकेट को खोलने की कोशिश नहीं करता।

+0

आपको अवगत होना चाहिए कि "xs: base64Binary" प्रकार वास्तव में डेटा (!!) पर बेस 64-एन्कोडिंग करने का कारण नहीं है। बाइनरी डेटा से हेडर और टेक्स्ट जानकारी को अलग करने के लिए माइम सीमाओं का उपयोग करके मल्टीपार्ट-संबंधित के रूप में प्रतिक्रिया भेजने के लिए यह क्या होता है। –

+0

जावा में पहली बार JAXB/CXF आपके लिए बाध्यकारी करेगा –

1

एएसपी.NET सी # यूआरएल को लक्षित करने के लिए POST अनुरोध के रूप में छवियों जैसे बाइनरी डेटा अपलोड करने का कार्यान्वयन:।

http://technowide.net/2012/09/01/upload-binary-data-http-post/

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