उपयोग GETया POSTविधि करते समय क्या अंतर है ? कौन सा अधिक सुरक्षित है? उनमें से प्रत्येक के (डिस) लाभ क्या हैं?
( इसी तरह का सवाल )
उपयोग GETया POSTविधि करते समय क्या अंतर है ? कौन सा अधिक सुरक्षित है? उनमें से प्रत्येक के (डिस) लाभ क्या हैं?
( इसी तरह का सवाल )
जवाबों:
यह सुरक्षा की बात नहीं है। HTTP प्रोटोकॉल परिभाषित करता है प्राप्त प्रकार होने के रूप में अनुरोध idempotent , पदों दुष्प्रभाव हो सकते हैं, जबकि। सादे अंग्रेजी में, इसका मतलब है कि GET का उपयोग किसी चीज़ को देखने के लिए किया जाता है, उसे बदले बिना, जबकि POST का उपयोग किसी चीज़ को बदलने के लिए किया जाता है। उदाहरण के लिए, एक खोज पृष्ठ को GET का उपयोग करना चाहिए, जबकि एक ऐसा रूप जो आपके पासवर्ड को बदलता है, को POST का उपयोग करना चाहिए।
इसके अलावा, ध्यान दें कि PHP अवधारणाओं को थोड़ा भ्रमित करता है। POST अनुरोध को क्वेरी स्ट्रिंग से और अनुरोध निकाय के माध्यम से इनपुट मिलता है। GET अनुरोध केवल क्वेरी स्ट्रिंग से इनपुट प्राप्त करता है। तो एक POST अनुरोध एक GET अनुरोध का सुपरसेट है; आप उपयोग कर सकते हैं $_GETएक पोस्ट अनुरोध में है, और यह भी अर्थपूर्ण हो सकता है में एक ही नाम के साथ मानकों के लिए $_POSTऔर $_GETहै कि मतलब अलग बातें।
उदाहरण के लिए, मान लें कि आपके पास लेख संपादित करने के लिए एक फ़ॉर्म है। लेख-आईडी क्वेरी स्ट्रिंग में हो सकता है (और, इसलिए, इसके माध्यम से उपलब्ध है $_GET['id']), लेकिन मान लें कि आप लेख-आईडी को बदलना चाहते हैं। नई आईडी तब अनुरोध निकाय ( $_POST['id']) में मौजूद हो सकती है । ठीक है, शायद यह सबसे अच्छा उदाहरण नहीं है, लेकिन मुझे आशा है कि यह दोनों के बीच के अंतर को दिखाता है।
जब उपयोगकर्ता किसी फ़ॉर्म में जानकारी दर्ज करता है और सबमिट पर क्लिक करता है, तो ब्राउज़र से सर्वर पर जानकारी: URL में, या HTTP अनुरोध के मुख्य भाग में दो तरीके भेजे जा सकते हैं।
GET विधि, जिसका उपयोग पहले उदाहरण में किया गया था, URL में नाम / मान जोड़े को जोड़ती है। दुर्भाग्य से, एक URL की लंबाई सीमित है, इसलिए यह विधि केवल तभी काम करती है जब कुछ ही पैरामीटर हों। यदि प्रपत्र बड़ी संख्या में पैरामीटर का उपयोग करता है, या यदि पैरामीटर में बड़ी मात्रा में डेटा है, तो URL को छोटा किया जा सकता है। इसके अलावा, URL पर दिए गए पैरामीटर ब्राउज़र के पता क्षेत्र में दिखाई देते हैं, जो पासवर्ड के लिए सबसे अच्छी जगह नहीं है।
GET विधि का विकल्प POST विधि है। यह विधि HTTP अनुरोध के शरीर के अंदर नाम / मूल्य जोड़े को पैकेज करती है, जो एक क्लीनर URL के लिए बनाता है और प्रपत्र आउटपुट पर कोई आकार सीमाएं नहीं लगाता है। यह अधिक सुरक्षित भी है।
सबसे अच्छा जवाब पहले वाला था।
आप उपयोग कर रहे हैं:
GETडेटा भेजने में भी पूरी तरह से सक्षम है, इसलिए बहुत सटीक उत्तर नहीं।
उपयोग करने के लिए दो सामान्य "सुरक्षा" निहितार्थ हैं GET। चूंकि डेटा URL स्ट्रिंग में दिखाई देता है, इसलिए संभव है कि कोई व्यक्ति आपके पते पर बार / URL को देख रहा हो, वह ऐसा कुछ देखने में सक्षम हो सकता है जो उन्हें सत्र कुकी के रूप में निजी नहीं होना चाहिए, जो संभवतः आपके सत्र को हाईजैक करने के लिए उपयोग किया जा सकता है। ध्यान रहे सभी के पास कैमरा फोन हो।
अनुरोधों के URL के भाग के रूप में अधिकांश वेब सर्वर एक्सेस लॉग में वेरिएबल्स के GETसाथ अन्य सुरक्षा निहितार्थों को GETलॉग करना पड़ता है । स्थिति के आधार पर, विनियामक जलवायु और डेटा की सामान्य संवेदनशीलता यह संभावित रूप से चिंताओं को बढ़ा सकती है।
कुछ क्लाइंट / फायरवॉल / आईडीएस सिस्टम GETअत्यधिक मात्रा में डेटा वाले अनुरोधों पर भड़क सकते हैं और इसलिए अविश्वसनीय परिणाम प्रदान कर सकते हैं।
POST वेब सर्वर पर फ़ाइल अपलोड के लिए उपयोग किए जाने वाले बहु-भाग बाइनरी इनपुट के लिए उन्नत कार्यक्षमता का समर्थन करता है।
POSTकंटेंट-लेंथ हेडर की आवश्यकता होती है, जो एप्लिकेशन विशिष्ट क्लाइंट कार्यान्वयन की जटिलता को बढ़ा सकता है क्योंकि प्रस्तुत डेटा का आकार अग्रिम में एक विशेष रूप से एकल-पास वृद्धिशील मोड में बनने से क्लाइंट अनुरोध को रोकने के लिए जाना जाना चाहिए। शायद HTTPआरपीसी (रिमोट प्रोसीजर कॉल) परिवहन के रूप में इसका उपयोग करके दुरुपयोग करने वालों के लिए एक मामूली मुद्दा ।
दूसरों ने पहले ही अर्थपूर्ण मतभेदों को कवर करने और इस प्रश्न के "जब" भाग में एक अच्छा काम किया है।
मैं जब मैं जानकारी पुन: प्राप्त कर रहा हूँ का उपयोग से एक URL और पोस्ट जब मैं जानकारी भेज रहा हूं करने के लिए एक यूआरएल।
यदि बहुत अधिक डेटा, या सॉर्ट-ऑफ संवेदनशील जानकारी (वास्तव में संवेदनशील सामान के साथ-साथ एक सुरक्षित कनेक्शन की आवश्यकता है) तो आपको POST का उपयोग करना चाहिए।
यदि आप चाहते हैं कि लोग आपके पृष्ठ को बुकमार्क करने में सक्षम हों, तो GET का उपयोग करें, क्योंकि सभी डेटा को बुकमार्क के साथ शामिल किया गया है।
बस GET विधि के साथ REFRESH मारने वाले लोगों से सावधान रहें, क्योंकि उपयोगकर्ता को चेतावनी दिए बिना डेटा हर बार फिर से भेजा जाएगा (POST कभी-कभी उपयोगकर्ता को डेटा को फिर से भेजने के बारे में चेतावनी देता है)।
यह W3C दस्तावेज़ HTTP GET और POST के उपयोग की व्याख्या करता है।
मुझे लगता है कि यह एक आधिकारिक स्रोत है।
सारांश है (दस्तावेज़ की धारा 1.3):
- GET का उपयोग करें यदि इंटरैक्शन एक प्रश्न की तरह अधिक है (यानी, यह एक सुरक्षित ऑपरेशन है जैसे कि एक क्वेरी, रीड ऑपरेशन, या लुकअप)।
- पोस्ट का उपयोग करें यदि:
- इंटरैक्शन ऑर्डर की तरह अधिक है, या
- इंटरैक्शन संसाधन की स्थिति को इस तरह से बदलता है, जिसे उपयोगकर्ता अनुभव करेगा (उदाहरण के लिए, एक सेवा के लिए सदस्यता), या
- बातचीत के परिणामों के लिए उपयोगकर्ता को जवाबदेह ठहराया जाना चाहिए।
Get और Post के तरीकों का आपके द्वारा उपयोग की जा रही सर्वर तकनीक से कोई लेना-देना नहीं है, यह php, asp.net या रूबी में समान काम करता है। GET और POST HTTP प्रोटोकॉल का हिस्सा हैं। जैसा कि उल्लेख किया गया है, POST अधिक सुरक्षित है। POST फॉर्म भी ब्राउज़र द्वारा कैश नहीं किए जाते हैं। POST का उपयोग बड़ी मात्रा में डेटा ट्रांसफर करने के लिए भी किया जाता है।
डेटा में परिवर्तन करते समय POST का उपयोग करने का कारण:
इसके अलावा, क्वेरी स्ट्रिंग (GET के साथ एकमात्र विकल्प) में संवेदनशील जानकारी न डालें क्योंकि यह पता बार, बुकमार्क और सर्वर लॉग में दिखाई देता है।
उम्मीद है कि यह बताता है कि लोग क्यों कहते हैं कि POST 'सुरक्षित' है। यदि आप संवेदनशील डेटा संचारित कर रहे हैं तो आपको SSL का उपयोग करना चाहिए।
GETऔर POSTHTTP तरीके हैं जो समान लक्ष्य प्राप्त कर सकते हैं
GETमूल रूप से डेटा प्राप्त करने (प्राप्त करने) के लिए, ए के GETपास एक शरीर नहीं होना चाहिए, इसलिए कुकीज़ से अलग, जानकारी पास करने का एकमात्र स्थान URL में है और URL लंबाई में सीमित हैं, GETइसकी तुलना में कम सुरक्षित है POSTक्योंकि भेजे गए डेटा का हिस्सा है URL
GETपासवर्ड, क्रेडिट कार्ड या अन्य संवेदनशील जानकारी भेजते समय कभी भी उपयोग न करें !, URL में डेटा सभी को दिखाई देता है, कैश्ड डेटा हो सकता है।
GETहानिरहित है जब हम वापस बटन लोड कर रहे हैं या कॉल कर रहे हैं, तो यह पुस्तक चिह्नित होगी, पैरामीटर ब्राउज़र इतिहास में बने रहेंगे, केवल ASCII वर्णों की अनुमति है।
POSTइसमें कुछ भी शामिल हो सकता है, जैसे डेटा संग्रहीत करना या अपडेट करना, या उत्पाद ऑर्डर करना या ई-मेल भेजना। POSTविधि में एक शरीर है।
POSTसर्वर के लिए संवेदनशील और गोपनीय जानकारी पास करने के लिए विधि सुरक्षित है यह URL में क्वेरी पैरामीटर में दिखाई नहीं देगा और पैरामीटर ब्राउज़र इतिहास में सहेजे नहीं जाते हैं। डेटा लंबाई पर कोई प्रतिबंध नहीं हैं। जब हम ब्राउज़र को पुनः लोड कर रहे हैं, तो उपयोगकर्ता को सचेत करना चाहिए कि डेटा फिर से प्रस्तुत किया जाएगा। POSTविधि को बुकमार्क नहीं किया जा सकता है
यदि आप संसाधन URL से प्राप्त करना चाहते हैं तो GET विधि का उपयोग करें। यदि आप अपने ब्राउज़र का पिछला बटन दबाते हैं, तो आप हमेशा अंतिम पृष्ठ देख सकते हैं, और इसे बुकमार्क किया जा सकता है, इसलिए यह POST विधि के रूप में सुरक्षित नहीं है।
यदि आप URL को कुछ सबमिट करना चाहते हैं तो POST विधि का उपयोग करें। उदाहरण के लिए, आप एक Google खाता बनाना चाहते हैं और आपको सभी विस्तृत जानकारी भरने की आवश्यकता हो सकती है, फिर आप 'सबमिट' बटन दबाते हैं (POST विधि को यहां कहा जाता है), एक बार जब आप सफलतापूर्वक सबमिट कर देते हैं, और अपने ब्राउज़र के बैक बटन को हिट करने का प्रयास करते हैं , आपको भरे हुए फॉर्म के साथ अंतिम पृष्ठ के बजाय त्रुटि या एक नया रिक्त फ़ॉर्म मिलेगा।
GETविधि:
इसका उपयोग केवल 256 वर्ण तिथि भेजने के लिए किया जाता है
इस पद्धति का उपयोग करते समय, जानकारी ब्राउज़र पर देखी जा सकती है
यह प्रपत्रों द्वारा उपयोग की जाने वाली डिफ़ॉल्ट विधि है
यह इतना सुरक्षित नहीं है।
POSTविधि:
इसका उपयोग असीमित डेटा भेजने के लिए किया जाता है।
इस पद्धति के साथ, जानकारी को ब्राउज़र पर नहीं देखा जा सकता है
आप स्पष्ट रूप से POSTविधि का उल्लेख कर सकते हैं
यह GETविधि की तुलना में अधिक सुरक्षित है
यह अधिक उन्नत सुविधाएँ प्रदान करता है