2013-04-16 10 views
5

में पोस्ट बनाम पोस्ट करें मैं एक आरईएसटी सेवा विकसित करने की प्रक्रिया में हूं जो उपयोगकर्ता को उनके चालान (चालान संख्या और बिलिंग ज़िप) पर दिखाई देने वाली जानकारी के कुछ टुकड़ों के आधार पर अपनी लिस्टिंग का दावा करने की अनुमति देता है।आरईएसटी वेब सेवा

मैंने अनगिनत लेख और स्टैक ओवरफ़्लो प्रश्न पढ़े हैं जब GET का उपयोग कब करें और POST का उपयोग कब करें। कुल मिलाकर, आम सहमति यह है कि जीईटी को बेवकूफ संचालन के लिए इस्तेमाल किया जाना चाहिए और POST को ऑपरेशन के लिए इस्तेमाल किया जाना चाहिए जो सर्वर की तरफ कुछ बनाते हैं। हालांकि, इस लेख:

http://blog.teamtreehouse.com/the-definitive-guide-to-get-vs-post

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

यह एक आंतरिक वेब सेवा है और केवल फ्रंट-एंड जो कॉल को सार्वजनिक रूप से उजागर करती है, इसलिए मुझे उपयोगकर्ता के ब्राउज़र इतिहास में दिखाई देने वाले यूआरएल के बारे में चिंता करने की ज़रूरत नहीं है। मेरी एकमात्र चिंता असंभव घटना होगी कि किसी को सर्वर लॉग पहुंच प्राप्त होगी, इस मामले में, मुझे बड़ी समस्याएं होंगी।

मैं सुरक्षा कारणों से POST की ओर झुका रहा हूं; हालांकि, इस तथ्य के कारण सही विधि की तरह महसूस होता है कि अनुरोध बेवकूफ है। इस मामले में अनुशंसित विधि क्या है?

उत्तर

5

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

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

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

+0

उत्तर के लिए धन्यवाद। यह इस विषय पर मेरे विचारों की पुष्टि करता है, भले ही POST बेवकूफ अनुरोधों के लिए गलत लगता है।हालांकि मैं मानता हूं कि सत्यापन की एक और अधिक सुरक्षित विधि का उपयोग किया जा सकता है, यह एक व्यावसायिक आवश्यकता है, और मुझे लगता है कि एक अलग चर्चा का विषय होगा। – Luke

0

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

+0

सही। मैं समझता हूं कि किसी भी विधि में कोई अंतर्निहित सुरक्षा नहीं है, केवल पोस्ट पोस्ट पैरा लॉग फ़ाइल में दिखाई नहीं देगी। जैसा कि आपने कहा था, मुझे लगता है कि जब यह एक आरईएसटी अनुरोध है तो इससे कोई फर्क नहीं पड़ता। – Luke

+0

कुछ लोग तर्क देते हैं कि पोस्ट अधिक सुरक्षित है क्योंकि वेब सर्वर यूआरएल लॉग कर सकते हैं और किसी स्थान पर डेटा रिसाव कर सकते हैं। मुझे सच में नहीं लगता कि यह एक व्यावहारिक चिंता है लेकिन सिद्धांत वहां है। – Lee

+0

@LeeWitney अच्छा बिंदु। खैर, किसी भी मामले में आपको निश्चित रूप से एक जीईटी के साथ पासवर्ड नहीं भेजना चाहिए। :-) –

0

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

आपको उस क्रिया का उपयोग करना चाहिए जो आप जो कर रहे हैं उसका सबसे अच्छा वर्णन करते हैं, आपको सर्वर से कुछ जानकारी मिल रही है, इसलिए GET का उपयोग करें। कुछ उचित सुरक्षा का उपयोग करें, जैसे बुनियादी HTTPS एन्क्रिप्शन। यदि आप यूआरएल को इन क्षेत्रों को क्लोजिंग से बचाना चाहते हैं, तो आप अनुरोध के पेलोड में डेटा भेज सकते हैं, जैसे:

GET /listings HTTP/1.1 
Content-Type = application/json 

{ "zip"  : "IN0N0USZ1PC0D35", 
    "invoice" : "54859081145" } 
संबंधित मुद्दे