संक्षिप्त उत्तर: पोस्ट अनुरोधों में, मान अनुरोध के "निकाय" में भेजे जाते हैं। वेब-प्रपत्रों के साथ वे संभवतया मीडिया प्रकार application/x-www-form-urlencodedया के साथ भेजे जाते हैं multipart/form-data। भाषाओं या चौखटे जो संभाल वेब अनुरोध करने के लिए डिजाइन किया गया है आम तौर पर इस तरह के अनुरोध के साथ "सही काम ™" करते हैं और (जैसे आसानी से डीकोड मूल्यों के लिए आसान पहुँच के साथ आप प्रदान प्रोग्रामिंग $_REQUESTया $_POSTPHP में, या cgi.FieldStorage(), flask.request.formअजगर में)।
अब थोड़ा सा खोदते हैं, जिससे अंतर समझने में मदद मिल सकती है;)
के बीच का अंतर GETऔर POSTअनुरोध काफी हद तक शब्दार्थ हैं। वे "अलग-अलग" भी उपयोग किए जाते हैं, जो अंतर को बताता है कि मूल्यों को कैसे पारित किया जाता है।
किसी GETअनुरोध को निष्पादित करते समय , आप सर्वर से एक, या संस्थाओं का एक सेट मांगते हैं। क्लाइंट को परिणाम को फ़िल्टर करने की अनुमति देने के लिए, यह URL के तथाकथित "क्वेरी स्ट्रिंग" का उपयोग कर सकता है। क्वेरी स्ट्रिंग के बाद का हिस्सा है ?। यह URI सिंटैक्स का हिस्सा है ।
इसलिए, आपके एप्लिकेशन कोड के दृष्टिकोण से ( अनुरोध प्राप्त करने वाला हिस्सा ), आपको इन मूल्यों तक पहुंच प्राप्त करने के लिए URI क्वेरी भाग का निरीक्षण करना होगा।
ध्यान दें कि कुंजी और मान URI का हिस्सा हैं। ब्राउज़र URI की लंबाई पर सीमा लगा सकते हैं । HTTP मानक कहता है कि कोई सीमा नहीं है। लेकिन इस लेखन के समय, अधिकांश ब्राउज़र है यूआरआई (मैं विशिष्ट मान नहीं है) की सीमा। GETअनुरोधों का उपयोग कभी भी सर्वर को नई जानकारी देने के लिए नहीं किया जाना चाहिए । खासकर बड़े दस्तावेज नहीं। वहीं आपको इसका उपयोग करना चाहिए POSTया PUT।
किसी POSTअनुरोध को निष्पादित करते समय , ग्राहक वास्तव में दूरस्थ होस्ट को एक नया दस्तावेज़ प्रस्तुत कर रहा है । तो, एक क्वेरी स्ट्रिंग (शब्दार्थ) समझ में नहीं आता है। यही कारण है कि आप अपने आवेदन कोड में उन तक पहुँच नहीं है।
POSTथोड़ा और अधिक जटिल है (और अधिक लचीला तरीका ):
POST अनुरोध प्राप्त करते समय, आपको हमेशा एक "पेलोड" या, HTTP शब्दों में: एक संदेश निकाय की अपेक्षा करनी चाहिए । अपने आप में संदेश निकाय बहुत बेकार है, क्योंकि कोई मानक नहीं है (जहां तक मैं बता सकता हूं। शायद एप्लिकेशन / ऑक्टेट-स्ट्रीम?) प्रारूप। बॉडी फॉर्मेट को Content-Typeहेडर द्वारा परिभाषित किया गया है । HTML FORMएलिमेंट का उपयोग करते समय method="POST", यह आमतौर पर होता है application/x-www-form-urlencoded। यदि आप फ़ाइल अपलोड का उपयोग करते हैं तो एक और बहुत ही सामान्य प्रकार मल्टीपार्ट / फॉर्म-डेटा है । लेकिन यह हो सकता है कुछ भी , से लेकर text/plain, अधिक application/jsonया यहां तक कि एक कस्टम application/octet-stream।
किसी भी स्थिति में, यदि एक POSTअनुरोध के साथ Content-Typeकिया जाता है जिसे आवेदन द्वारा नियंत्रित नहीं किया जा सकता है, तो उसे एक 415स्थिति-कोड वापस करना चाहिए ।
अधिकांश प्रोग्रामिंग लैंग्वेज (और / या वेब-फ्रेमवर्क) संदेश बॉडी को / से सबसे सामान्य प्रकारों (जैसे application/x-www-form-urlencoded, multipart/form-dataया application/json) को डी / एनकोड करने का एक तरीका प्रदान करते हैं । तो यह आसान है। कस्टम प्रकारों को संभावित रूप से कुछ अधिक काम करने की आवश्यकता होती है।
उदाहरण के रूप में एक मानक एचटीएमएल फ़ॉर्म एन्कोडेड दस्तावेज़ का उपयोग करते हुए, एप्लिकेशन को निम्न चरणों का पालन करना चाहिए:
Content-Typeक्षेत्र पढ़ें
- यदि मूल्य समर्थित मीडिया-प्रकारों में से एक नहीं है, तो
415स्थिति कोड के साथ प्रतिक्रिया लौटाएं
- अन्यथा, संदेश निकाय से मानों को डीकोड करें।
फिर, अन्य लोकप्रिय भाषाओं के लिए PHP, या वेब-फ्रेमवर्क जैसी भाषाएँ संभवतः आपके लिए इसे संभालेंगी। इसका अपवाद 415त्रुटि है। कोई भी फ्रेमवर्क यह अनुमान नहीं लगा सकता है कि आपका एप्लिकेशन किस सामग्री-प्रकार का समर्थन करता है और / या समर्थन नहीं करता है। यह आप पर निर्भर करता है।
एक PUTअनुरोध एक अनुरोध के रूप में बहुत सटीक तरीके से नियंत्रित किया जाता है POST। बड़ा अंतर यह है कि POSTअनुरोध को सर्वर को यह तय करने देना चाहिए कि (और यदि हो तो) एक नया संसाधन कैसे बनाए। ऐतिहासिक रूप से (अब अप्रचलित RFC2616 से यह URI के "अधीनस्थ" (बच्चे) के रूप में एक नया संसाधन बनाना था जहां अनुरोध भेजा गया था)।
PUTइसके विपरीत एक अनुरोध उस URI पर एक संसाधन को "जमा" करने के लिए माना जाता है , और वास्तव में उस सामग्री के साथ। न आधिक न कम। यह विचार है कि क्लाइंट "पुटिंग" से पहले पूरा संसाधन तैयार करने के लिए जिम्मेदार है। सर्वर को इसे दिए गए URL के रूप में स्वीकार करना चाहिए ।
परिणामस्वरूप, मौजूदा संसाधन POSTको बदलने के लिए आमतौर पर अनुरोध का उपयोग नहीं किया जाता है । एक PUTअनुरोध दोनों बना और बदल सकते हैं ।
पक्षीय लेख
" पथ पैरामीटर " भी हैं जिनका उपयोग दूरस्थ में अतिरिक्त डेटा भेजने के लिए किया जा सकता है, लेकिन वे इतने असामान्य हैं, कि मैं यहां बहुत विस्तार में नहीं जाऊंगा। लेकिन, संदर्भ के लिए, यहाँ RFC का एक अंश है:
पदानुक्रमित रास्तों में डॉट-सेगमेंट के अलावा, जेनेरिक सिंटैक्स द्वारा एक पथ खंड को अपारदर्शी माना जाता है। यूआरआई उत्पादक अनुप्रयोग अक्सर स्कीम-विशिष्ट या डीरेफेरेंस-हैंडलर-विशिष्ट उपकेंद्रों को हटाने के लिए एक सेगमेंट में अनुमत आरक्षित वर्णों का उपयोग करते हैं। उदाहरण के लिए, अर्धविराम (";") और समान ("=") आरक्षित वर्णों का उपयोग अक्सर उस खंड पर लागू मापदंडों और पैरामीटर मानों को परिसीमित करने के लिए किया जाता है। अल्पविराम (",") आरक्षित वर्ण अक्सर समान उद्देश्यों के लिए उपयोग किया जाता है। उदाहरण के लिए, एक यूआरआई निर्माता "नाम; v = 1.1" जैसे सेगमेंट का उपयोग "नाम" के संस्करण 1.1 के संदर्भ में कर सकता है, जबकि दूसरा समान नाम के लिए "नाम, 1.1" जैसे सेगमेंट का उपयोग कर सकता है। पैरामीटर प्रकार को योजना-विशिष्ट शब्दार्थ द्वारा परिभाषित किया जा सकता है,
multipart/form-data। उन लोगों के लिए हालांकि, यहाँ इसके बारे में एक सवाल है ।