HTTP अनुरोध शीर्षलेख बनाम अनुरोध निकाय से संबंधित क्या है?


51

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

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

क्या ऐसा कोई मापदंड है?


इसके अलावा stackoverflow.com/questions/40492782/…
हनी

जवाबों:


51

जब जानकारी महत्वपूर्ण है, तो आपको इसे शरीर में डालना चाहिए।

क्यों?

  1. प्रॉक्सी सर्वर को हेडर को संशोधित करने की अनुमति है। कई ऐसे हेडर को स्ट्रिप करने के लिए कॉन्फ़िगर किए गए हैं जिन्हें वे नहीं जानते हैं। हालाँकि, यह केवल तब लागू होता है जब आप अनएन्क्रिप्टेड HTTP का उपयोग करते हैं। जब आप HTTPS का उपयोग करते हैं, तो प्रॉक्सी हेडर नहीं बदल सकता क्योंकि वे एन्क्रिप्टेड हैं।
  2. जब आप एक webservice का उपयोग करते हैं, तो आप आमतौर पर अन्य उपकरणों, सेवाओं और उपकरणों के साथ अंतर के लिए ऐसा करते हैं। अधिकांश API और उपकरण जो webservices के साथ काम करते हैं, आसानी से अनुरोधों को बदल सकते हैं, लेकिन कई कस्टम हेडर जोड़ना मुश्किल या असंभव भी बनाते हैं। यह, ज़ाहिर है, केवल तभी लागू होता है जब अंतर-चिंता एक चिंता है। लेकिन जब आप परवाह नहीं करते हैं, तो आप अपने आप से पूछना चाह सकते हैं कि आप कच्चे टीसीपी में अपने प्रोटोकॉल का निर्माण करने के बजाय पहली जगह में वेबसर्विस का उपयोग क्यों कर रहे हैं।

महान जवाब - दो विचार जो मेरे लिए मायने रखते हैं लेकिन मुझे पहले नहीं पढ़ाया गया है।
आर क्लवेन

1
IK यह पुराना है, लेकिन मैं इस जवाब को बढ़ाने के लिए इस समुदाय में शामिल हुआ। कुडोस।
पोटेशियम आयन

22

जबकि रेखा कुछ धुंधली है, मेरे लिए अंगूठे का एक नियम है: डेटा जो आपके व्यावसायिक तर्क पर काम करता है वह शरीर में होना चाहिए, मेटाडेटा कर सकते हैं / हेडर में रखा जाना चाहिए।

इसे देखने का एक और तरीका है: जो डेटा केवल विशिष्ट प्रकार के अनुरोधों में दिखाई देता है वह शरीर में होना चाहिए जबकि डेटा जो पूरे एप्लिकेशन में लगातार संभाला जाता है उसे हेडर में जाना चाहिए।

फिर भी एक और दृष्टिकोण है: क्या आप सोच सकते हैं कि डेटा का एक टुकड़ा आपके अनुप्रयोग के बजाय एक राउटर / फ़ायरवॉल द्वारा विश्व स्तर पर संभाला जाता है? यदि हाँ, तो यह शरीर में नहीं बल्कि हेडर में जाना चाहिए।

इन नियमों को लागू करने के कुछ उदाहरण होंगे:

  • सुरक्षा क्रेडेंशियल्स हेडर में जाते हैं क्योंकि संभवत: उन्हें एक आवेदन के सभी स्थानों में समान रूप से नियंत्रित किया जाएगा; कार्यान्वयन के स्तर पर, संभवत: कुछ मान्य फ़िल्टर होंगे जो मान्य क्रेडेंशियल्स के बिना अनुरोधों को अस्वीकार करते हुए वास्तविक समापन बिंदु की परवाह किए बिना अनुरोध को संभालते हैं यदि यह फ़िल्टर के माध्यम से प्राप्त होता है।
  • यदि, दूसरी ओर, आपके पास एक समापन बिंदु है जो एक व्यवस्थापक को आपके सिस्टम में उपयोगकर्ताओं को जोड़ने की अनुमति देता है, तो बनाए जाने वाले उपयोगकर्ता का लॉगिन अनुरोध निकाय में होना चाहिए: क) यह आपके आवेदन के व्यापार तर्क द्वारा नियंत्रित किया जाता है, बी) यह इस विशेष समापन बिंदु में दिखाई देता है लेकिन दूसरों में नहीं।
  • कैशिंग को नियंत्रित करने वाले विकल्प हेडर में अच्छी तरह से फिट हो सकते हैं (जब तक कि कैशिंग आपके एप्लिकेशन के व्यावसायिक तर्क का एक मुख्य हिस्सा नहीं है)।

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


0

क्लाइंट अनुरोध की सामग्री; जो एक ही सर्वर के लिए कई अनुरोधों में नहीं बदला जाएगा, HEADER उदा। क्रेडेंशियल्स का हिस्सा होगा, अन्य जो अक्सर प्रति अनुरोध परिवर्तन होते हैं, बॉडी का हिस्सा होंगे।

या

संदेश / शरीर सामग्री की संपत्ति हेडर में जाएगी। जैसे) एन्कोडिंग प्रकार, सामग्री-लंबाई, सामग्री-प्रकार।

तथा

आपके मामले में जैसे फ़िल्टर पैरामीटर को url में क्वेरी / अनुरोध params के रूप में जोड़ा जाना चाहिए।

/mobiles?type=MOTO&colour=black

बाकी सेवाओं में url स्वयं किसी ऑब्जेक्ट को संदर्भित करेगा

/conferences/{conference_id} -> विशिष्ट सम्मेलन को संदर्भित करता है


क्या यह एक उद्धरण है? कहाँ से ? आप यह क्यों सुझाव दे रहे हैं? कृपया इसे बेहतर बनाने के लिए, अपने उत्तर में कुछ संपादन करें।
मचाडो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.