आप कब POST का उपयोग करते हैं और कब GET का उपयोग करते हैं?


343

मैं जो इकट्ठा कर सकता हूं, उसमें तीन श्रेणियां हैं:

  1. उपयोग GETऔर उपयोग कभी न करेंPOST
  2. उपयोग POSTऔर उपयोग कभी न करेंGET
  3. इससे कोई फर्क नहीं पड़ता कि आप किसका उपयोग करते हैं।

क्या मैं उन तीन मामलों को संभालने में सही हूं? यदि हां, तो प्रत्येक मामले से कुछ उदाहरण क्या हैं?


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


1
नाम से अधिक सांकेतिक शब्दों में बदलना करने का कोई मानक तरीका नहीं है -> क्वेरी स्ट्रिंग में मूल्य जोड़े ताकि जब तक आपके अनुरोध बहुत बुनियादी न हों (यानी कोई सरणियाँ या नेस्टेड डेटा संरचनाएं) आपको केवल POST पर विचार करना चाहिए जो एक बॉडी फ़ील्ड प्रदान करता है जिसे आप एन्कोडिंग स्वरूपों के साथ उपयोग कर सकते हैं (JSON, XML आदि)।
थिम्हाई

जवाबों:


376

POSTनिर्माण जैसी विनाशकारी क्रियाओं के लिए उपयोग करें (मैं विडंबना से अवगत हूं), संपादन, और विलोपन, क्योंकि आप POSTअपने ब्राउज़र के एड्रेस बार में कोई कार्रवाई नहीं कर सकते । GETजब किसी व्यक्ति को किसी कार्रवाई को कॉल करने की अनुमति देने के लिए सुरक्षित हो तो इसका उपयोग करें । तो एक यूआरएल की तरह:

http://myblog.org/admin/posts/delete/357

केवल आइटम को हटाने के बजाय आपको एक पुष्टिकरण पृष्ठ पर लाना चाहिए। इस तरह से दुर्घटनाओं से बचना बहुत आसान है।

POSTसे भी अधिक सुरक्षित है GET, क्योंकि आप किसी URL में जानकारी चिपका नहीं रहे हैं। और इसलिए एक HTML फॉर्म GETके methodलिए जो पासवर्ड या अन्य संवेदनशील जानकारी एकत्र करता है, का उपयोग करना सबसे अच्छा विचार नहीं है।

एक अंतिम नोट: POSTकी तुलना में जानकारी का एक बड़ा राशि संचारित कर सकते हैं GET। 'POST' में संचरित डेटा के लिए कोई आकार प्रतिबंध नहीं है, जबकि 'GET' 2048 वर्णों तक सीमित है।


82
जीईटी अनुरोधों के जवाबों को रद्द किया जा सकता है। POST के प्रति प्रतिक्रिया नहीं होनी चाहिए।
मोकेलर 10

31
URL में स्टिकिंग जानकारी कैसे अधिक सुरक्षित नहीं है? (Btw, मैं उन लोगों में से एक हूं जो मानते हैं कि सुरक्षा की झूठी भावना अधिक खतरनाक है, सुरक्षा बिल्कुल नहीं है)।
ईपाराव

42
@ePharaoh: यह एड्रेस बार पर यूजर्स के कंधे को देखकर पासवर्ड पढ़ने से रोकता है।
क्वेंटिन

35
@ePharaoh: "कैज़ुअल ऑब्जर्वर के लिए थोड़ा कम डेटा एक्सपोज़ करना" शायद "अधिक सुरक्षित" की तुलना में एक बेहतर सूत्रीकरण होगा - URL लॉग, रेफ़र, कैश जैसे कई स्थानों को समाप्त कर सकता है। आप निश्चित रूप से सही हैं, इससे सुरक्षा में वृद्धि नहीं होती है - लेकिन यह सबसे खराब असुरक्षित प्रथाओं को सीमित करता है (यह भी देखें: thedailywtf.com/Articles/The_Spider_of_Doom.aspx )
Piskvor ने

24
@ डेविड डोरवर्ड: या बाय कॉमन नेम: शोल्डर अटैक
इदं के

206

संक्षेप में

  • अनुरोधों के GETलिए उपयोग करेंsafe andidempotent
  • अनुरोधों के POSTलिए उपयोग करेंneither safe nor idempotent

विवरण में प्रत्येक के लिए एक उचित स्थान है। यहां तक ​​कि अगर आप Restful सिद्धांतों का पालन नहीं करते हैं , तो REST के बारे में सीखने और संसाधन उन्मुख दृष्टिकोण कैसे काम करता है, से बहुत कुछ प्राप्त किया जा सकता है।

use GETsसंचालन के लिए एक ईमानदार आवेदन जो दोनों हैं safe and idempotent

एक safeऑपरेशन एक ऑपरेशन है जो not change the dataअनुरोध करता है ।

एक idempotentऑपरेशन वह है जिसमें परिणाम be the sameकोई फर्क नहीं पड़ता कि आप इसे कितनी बार अनुरोध करते हैं।

इसका कारण यह है कि, जीईटी का उपयोग सुरक्षित संचालन के लिए किया जाता है क्योंकि वे स्वचालित रूप से भी बेकार हैं । आमतौर पर एक जीईटी का उपयोग एक संसाधन (एक प्रश्न और इसके उदाहरण के लिए स्टैक ओवरफ्लो पर संबंधित उत्तर) या संसाधनों के संग्रह के लिए किया जाता है।

PUTsसंचालन के लिए एक Restful ऐप का उपयोग किया जाएगा not safe but idempotent

मुझे पता है कि प्रश्न GET और POST के बारे में था, लेकिन मैं एक सेकंड में POST पर लौटूंगा।

आमतौर पर एक PUT का उपयोग किसी संसाधन को संपादित करने के लिए किया जाता है (उदाहरण के लिए स्टैक ओवरफ्लो पर एक प्रश्न या उत्तर को संपादित करना)।

A POSTका उपयोग किसी भी ऑपरेशन के लिए किया जाएगा neither safe or idempotent

आमतौर पर एक POST का उपयोग एक नया SO प्रश्न बनाने के लिए एक नया संसाधन बनाने के लिए किया जाएगा (हालाँकि कुछ डिज़ाइनों में PUT का उपयोग इसके लिए भी किया जाएगा)।

यदि आप दो बार POST चलाते हैं तो आप TWO नए प्रश्न तैयार करेंगे।

एक DELETE ऑपरेशन भी है, लेकिन मुझे लगता है कि मैं वहाँ छोड़ सकता हूँ :)

विचार-विमर्श

व्यावहारिक रूप से आधुनिक वेब ब्राउज़र आमतौर पर केवल GET और POST का समर्थन करते हैं (आप इन सभी कार्यों को जावास्क्रिप्ट कॉल के माध्यम से कर सकते हैं, लेकिन प्रपत्रों में डेटा दर्ज करने और सबमिट करने के संदर्भ में आपने आमतौर पर दो विकल्प प्राप्त किए हैं)। RESTful एप्लिकेशन में POST को अक्सर PUT और DELETE कॉल प्रदान करने के लिए ओवरराइड किया जाएगा।

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

आपको एक ऑपरेशन के लिए कभी भी जीईटी का उपयोग नहीं करना चाहिए जो डेटा को बदल देता है। यदि कोई खोज इंजन आपकी बुराई ऑप के लिए एक लिंक क्रॉल करता है, या क्लाइंट बुकमार्क करता है तो यह बड़ी मुसीबत पैदा कर सकता है।


यदि आप लॉगिन के लिए APIREST संसाधन बनाएंगे, जिसे आप पसंद करेंगे, यह सुरक्षित है और यह बहुत अच्छा है, मैं इसे अतिथि करता हूं।
झॉनी लोपेज

1
एक सुरक्षित प्राप्त स्वचालित रूप से उदासीन नहीं है। परिणाम सेट समान विनाशकारी क्वेरी के साथ भिन्न हो सकता है।
रिचीएचएच

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

79

यदि आपको बार-बार किए जा रहे अनुरोध से कोई आपत्ति नहीं है, तो इसका उपयोग करें (यह वह स्थिति नहीं है)।

यदि ऑपरेशन सिस्टम की स्थिति को बदलता है तो POST का उपयोग करें।


1
चूंकि एक फॉर्म सिस्टम की स्थिति को बदलता है, इसलिए HTML फॉर्म टैग का डिफ़ॉल्ट तरीका GET क्यों है?
ziiweb

3
@ user248959 क्या खोज बॉक्स में दृश्य स्थिति बदल जाती है? डिफ़ॉल्ट को बहुत पहले सेट किया गया था, शायद दुर्घटना से लगभग। मैं इतिहास में यह भी नहीं जान पाया कि क्या POST बिंदु रूपों में एक विकल्प था।
डगलस लीडर

@ziiweb यहां तक ​​कि अगर <form> के उपयोग के मामलों का बहुमत POST है, तो dafault को "हानिरहित" GET के रूप में परिभाषित करना बेहतर है। यह एक सुरक्षा दृष्टिकोण से बेतुका लग सकता है जब यह लॉग फाइल आदि में डेटा को उजागर करता है, लेकिन यह सर्वर-साइड डेटा (जीईटी पर डेटा को संशोधित नहीं करना चाहिए) के संबंध में विफल-सुरक्षित है। मुझे लगता है, एक आज अलग तरह से फोकस सेट करेगा (अधिमानतः किसी भी डिफ़ॉल्ट को छोड़ कर और methodअनिवार्य बनाकर )
हेगन वॉन एटिजन

मान लीजिए मेरे पास एक एंडपॉइंट है जो फ़ाइल को इनपुट के रूप में स्वीकार करता है, फ़ाइल पर कुछ प्रसंस्करण करता है (उदाहरण - regex पर आधारित डेटा निकालें) और JSON डेटा देता है, तो क्या मैं सर्वर पर फ़ाइल अपलोड करने के लिए GET अनुरोध का उपयोग कर सकता हूं। या मुझे POST अनुरोध का उपयोग करना चाहिए?
चर

67

लघु संस्करण

GET: आमतौर पर सबमिट किए गए खोज अनुरोधों या किसी भी अनुरोध के लिए उपयोग किया जाता है, जहां आप चाहते हैं कि उपयोगकर्ता फिर से सटीक पृष्ठ को खींचने में सक्षम हो।

GET के लाभ:

  • URL को सुरक्षित रूप से बुकमार्क किया जा सकता है।
  • पृष्ठों को सुरक्षित रूप से पुनः लोड किया जा सकता है।

GET के नुकसान:

POST: उच्च सुरक्षा अनुरोधों के लिए उपयोग किया जाता है जहां डेटा का उपयोग किसी डेटाबेस को बदलने के लिए किया जा सकता है, या एक ऐसा पेज जिसे आप किसी को बुकमार्क नहीं करना चाहते हैं।

POST के लाभ:

  • नाम-मूल्य जोड़े url में प्रदर्शित नहीं होते हैं। (सुरक्षा + = 1)
  • नाम-मूल्य जोड़े की असीमित संख्या POST के माध्यम से पारित की जा सकती है। संदर्भ।

POST के नुकसान:

  • POST डेटा का उपयोग करने वाले पृष्ठ को बुकमार्क नहीं किया जा सकता है। (आप चाहें तो

लंबा संस्करण

हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल से सीधे - HTTP / 1.1 :

9.3 जी.ई.टी.

GET विधि का अर्थ है, अनुरोध-URI द्वारा पहचानी गई किसी भी जानकारी (एक इकाई के रूप में) को पुनः प्राप्त करना। यदि अनुरोध-URI डेटा-उत्पादक प्रक्रिया को संदर्भित करता है, तो यह उत्पादित डेटा है जिसे प्रतिक्रिया में इकाई के रूप में लौटाया जाएगा और प्रक्रिया के स्रोत पाठ को नहीं, जब तक कि पाठ प्रक्रिया का आउटपुट नहीं होता।

GET विधि के शब्दार्थ एक "सशर्त GET" में बदल जाते हैं यदि अनुरोध संदेश में एक if-Modified-चूंकि, if-Unmodified- चूंकि, if-Match, if-none-match, या if-Range हैडर फ़ील्ड शामिल हैं। एक सशर्त GET विधि अनुरोध करती है कि इकाई को केवल सशर्त हेडर फ़ील्ड (एस) द्वारा वर्णित परिस्थितियों में स्थानांतरित किया जाए। सशर्त जीईटी पद्धति का उद्देश्य अनावश्यक नेटवर्क उपयोग को कम करने के लिए कैश्ड संस्थाओं को कई अनुरोधों की आवश्यकता के बिना ताज़ा करने या क्लाइंट द्वारा पहले से रखे गए डेटा को स्थानांतरित करने की अनुमति देना है।

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

GET अनुरोध की प्रतिक्रिया तब और तब उपलब्ध होती है जब वह धारा 13 में वर्णित HTTP कैशिंग की आवश्यकताओं को पूरा करता है।

प्रपत्रों के लिए उपयोग किए जाने पर सुरक्षा विचारों के लिए खंड 15.1.3 देखें।

9.5 पोस्ट

POST विधि का उपयोग अनुरोध करने के लिए किया जाता है कि मूल सर्वर अनुरोध में संलग्न इकाई को अनुरोध-लाइन में अनुरोध-यूआरआई द्वारा पहचाने गए संसाधन के एक नए अधीनस्थ के रूप में स्वीकार करता है। POST को निम्नलिखित कार्यों को कवर करने के लिए एक समान विधि की अनुमति देने के लिए डिज़ाइन किया गया है:

  • मौजूदा संसाधनों की व्याख्या;

  • बुलेटिन बोर्ड, समाचार समूह, मेलिंग सूची या लेखों के समान समूह के लिए एक संदेश पोस्ट करना;

  • डेटा का एक ब्लॉक प्रदान करना, जैसे कि डेटा सबमिट करने की प्रक्रिया के लिए फ़ॉर्म सबमिट करना;

  • एक परिशिष्ट ऑपरेशन के माध्यम से एक डेटाबेस का विस्तार।

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

POST विधि द्वारा की गई कार्रवाई के परिणामस्वरूप एक संसाधन नहीं हो सकता है जिसे URI द्वारा पहचाना जा सकता है। इस मामले में, 200 (ओके) या 204 (कोई सामग्री) उपयुक्त प्रतिक्रिया की स्थिति है, इस पर निर्भर करता है कि प्रतिक्रिया में एक इकाई शामिल है जो परिणाम का वर्णन करती है।


2
"पोस्ट डेटा का उपयोग करने वाले पृष्ठ को बुकमार्क नहीं किया जा सकता है": ठीक है, यह एक फायदा है, नहीं? आप शायद नहीं चाहते कि आपका डेटा-फेरबदल क्वेरी को बुकमार्क किया जाए।
पिस्कवर ने बिल्डिंग

मुझे लगता है कि अगर हर बार पोस्ट का उपयोग किया गया था तो आप इसे सुरक्षा संचालित उद्देश्य के लिए उपयोग कर रहे थे तो यह एक फायदा होगा। आमतौर पर यह है, लेकिन GET की लंबाई सीमा है। हो सकता है, कोई व्यक्ति गैर-सुरक्षा संबंधी डेटा का केवल एक टन पारित कर रहा हो और वह पृष्ठ को बुकमार्क करना चाहेगा? कौन जानता है ...
Cimplicity

जीईटी के एक नुकसान के बारे में, अर्थात् "वेरिएबल्स को यूआरएल के माध्यम से नाम-मूल्य जोड़े के रूप में पेश किया जाता है", क्या एमवीसी रूटिंग और परिणामी अनुकूल URL के कारण उस मुद्दे को समाप्त कर देगा?
MrBoJangles

@MrBoJangles: अच्छे URL का उपयोग करने से संदर्भित व्यक्ति को 'शोल्डर ओवर ओवर शो' करने से नहीं रोकता है। साइड नोट: MVC को अच्छे URL से रूटिंग करने की आवश्यकता नहीं है और अच्छे URL से रूटिंग करने के लिए MVC की आवश्यकता नहीं है; वे कभी-कभी एक साथ उपयोग किए जाते हैं, लेकिन अलग-अलग भी उपयोग किए जा सकते हैं।
icktoofay

.NET दुनिया में, सभी व्यावहारिक उद्देश्यों के लिए, अच्छी url क्षमता = MVC। मुझे लगता है कि आप कुछ IIS पुनर्लेखन या कुछ अजीब कोड-आधारित कर सकते हैं, लेकिन वे और भी कम सुखद हैं। MVC, जीत के लिए कहने की जरूरत नहीं है।
MrBoJangles

28

पहली महत्वपूर्ण बात GET बनाम POST का अर्थ है:

  • प्राप्त करने के लिए इस्तेमाल किया जाना चाहिए ... सर्वर से कुछ जानकारी ...
  • जबकि POST का उपयोग सर्वर को कुछ जानकारी भेजने के लिए किया जाना चाहिए ।


उसके बाद, कुछ बातें जो नोट की जा सकती हैं:

  • जीईटी का उपयोग करते हुए, आपके उपयोगकर्ता अपने ब्राउज़र में "बैक" बटन का उपयोग कर सकते हैं, और वे पृष्ठों को बुकमार्क कर सकते हैं
  • मापदंडों के आकार में एक सीमा है जिसे आप जीईटी (इंटरनेट एक्सप्लोरर के कुछ संस्करणों के लिए 2KB के रूप में पारित कर सकते हैं , अगर मैं गलत नहीं हूं) ; सीमा POST के लिए बहुत अधिक है, और आम तौर पर सर्वर के कॉन्फ़िगरेशन पर निर्भर करता है।


वैसे भी, मुझे नहीं लगता कि हम बिना जीईटी के "लाइव" कर सकते हैं: यह सोचें कि आप प्रतिदिन क्वेरी स्ट्रिंग में कितने URLs का उपयोग कर रहे हैं - बिना GET के, वे सभी काम नहीं करेंगे;;


ठीक है, अगर हर कोई एक GET शैली में सुंदर- urls का उपयोग करता है: http://example.com/var1/value1/var2/value2/var3/value3हम 'तकनीकी रूप से' अब GET नहीं कर सकते हैं ...
टायलर कार्टर

5
@ चाचा 102 को छोड़कर आपको अभी भी उस संसाधन को प्राप्त करना है। GET का उपयोग करके लगभग सभी पृष्ठ, चित्र, स्क्रिप्ट आदि वेब ब्राउज़र में लोड किए जाते हैं।
रियान

3
@ चाचा 102 - यहां तक ​​कि www.mypage.com/contact/आंतरिक रूप से कुछ पाने के लिए भी उपयोग करता हैindex.php?url=/contact/
थियागो बेलेम

1
GET की आकार सीमा पर जोर! इसके अलावा, GET पैरामीटर बुकमार्क में शामिल हैं, जबकि POST नहीं हैं। और, उपयोगकर्ता GET- अनुरोधित पृष्ठ को ताज़ा कर सकता है, लेकिन पोस्ट-अनुरोधित एक (सूचना का बचाव करने के बारे में चेतावनी के बिना) नहीं।
Ricket

12

कई वेब ब्राउज़रों में लंबाई की कमी के अंतर के अलावा, एक अर्थगत अंतर भी है। जीईटी को "सुरक्षित" माना जाता है कि वे केवल-पढ़ने वाले ऑपरेशन हैं जो सर्वर स्थिति को नहीं बदलते हैं। POST आम तौर पर राज्य को बदल देंगे और पुनर्जीवन पर चेतावनी देंगे। खोज इंजन के वेब क्रॉलर GET बना सकते हैं, लेकिन कभी POST नहीं बनाना चाहिए।

अगर आप स्टेट्स बदले बिना डेटा पढ़ना चाहते हैं और सर्वर पर स्टेट अपडेट करना चाहते हैं तो जीएसटी का इस्तेमाल करें।


+1। यह rfc से प्रमुख वैचारिक अंतर है जिसमें से बाकी सब कुछ इस प्रकार है। w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3
फ्रैंक किसान

8

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


8

एक व्यावहारिक अंतर यह है कि ब्राउज़र और वेबसर्वर के पास उन वर्णों की संख्या की सीमा होती है जो किसी URL में मौजूद हो सकते हैं। यह आवेदन से आवेदन करने के लिए अलग है, लेकिन यदि आप textareaअपने रूपों में प्राप्त कर चुके हैं तो इसे हिट करना निश्चित रूप से संभव है ।

GETs के साथ एक और गेटा - वे खोज इंजन और अन्य स्वचालित प्रणालियों द्वारा अनुक्रमित होते हैं। Google के पास एक बार एक उत्पाद था जो आपके द्वारा देखे जा रहे पृष्ठ पर लिंक पूर्व-प्राप्त करेगा, इसलिए यदि आप उन लिंक को क्लिक करते हैं तो वे लोड करना अधिक तेज़ होगा। इसने उन साइटों पर भारी तबाही मचाई, जिनके लिंक थे delete.php?id=1- लोगों ने अपनी पूरी साइट खो दी।


1
आपके वेबसर्वर की शायद इस पर भी सीमा है।
बिली ओनेल

वैसे, POST की भी एक सीमा है।
chelmertz

1
ग्रेट पॉइंट, @ बिलियन, मैंने उस में @chelmertz जोड़ दिया है, लेकिन मैं चाहूं तो इसे बदल सकता हूं, और यह बहुत अधिक है। मैंने उदाहरण के लिए अपाचे उदाहरणों में 1 गीगाबाइट फ़ाइलों को पोस्ट किया है।
सिवायजोज़

मुझे लगता है कि URL खोज इंजन द्वारा अनुक्रमित हो रहे हैं। मुझे समझ नहीं आ रहा है कि GET के साथ क्या करना है। मेरा मतलब है कि एक यूआरएल सिर्फ एक यूआरएल नहीं है?
हनी

1
@ खोज इंजन लिंक का अनुसरण करते हैं। लिंक GET अनुरोध करते हैं। खोज इंजन फॉर्म जमा नहीं करते हैं (यदि उन्होंने किया था, तो आप Google को हर कुछ दिनों में अपनी साइट पर एक खाते के लिए साइन अप करते हुए देखेंगे) और इस तरह कोई पोस्ट अनुरोध नहीं करेंगे।
सिजयोज़

7

जब आप URL को पृष्ठ की स्थिति को प्रतिबिंबित करना चाहते हैं तो GET का उपयोग करें। यह गतिशील रूप से उत्पन्न पृष्ठों को देखने के लिए उपयोगी है, जैसे कि यहाँ देखे गए। एक POST का उपयोग डेटा जमा करने के लिए किया जाना चाहिए, जैसे मैं "पोस्ट योर आंसर" बटन पर क्लिक करता हूं। यह एक क्लीनर URL भी बनाता है क्योंकि यह पथ के बाद एक पैरामीटर स्ट्रिंग उत्पन्न नहीं करता है।


6

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

ग्रैवतार पृष्ठ से एक उदाहरण: http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802?d=monsterid

कुछ बेहतर प्रदर्शन कर सकते हैं, कुछ webservers हैंडलर को लागू करने से पहले एक अस्थायी फ़ाइल के लिए POST सामग्री लिखते हैं।

विचार करने के लिए एक और चीज आकार की सीमा है। जीईटी को मानक द्वारा 1024 बाइट्स के आकार से कैप किया जाता है, हालांकि ब्राउज़र अधिक समर्थन कर सकते हैं।

बेहतर ब्राउज़र संगतता प्राप्त करने के लिए इससे अधिक डेटा स्थानांतरित करना एक POST का उपयोग करना चाहिए।

उस सीमा से कम भी एक समस्या है, जैसा कि एक अन्य पोस्टर ने लिखा है, URL में कुछ भी इतिहास की तरह, ब्राउजर के UI के अन्य भागों में समाप्त हो सकता है।


4

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


यह केवल ब्राउज़र नहीं है जो जीईटी के सुरक्षित और आदर्श होने पर भरोसा करते हैं: खोज इंजन मकड़ियों और प्रीफ़ेटिंग ब्राउज़र (जैसे फास्टफ़ॉक्स) भी इस पर भरोसा करते हैं।
फ्रैंक किसान

@ मिलि, अंत में सही उत्तर वाला कोई। मैं वास्तव में हैरान हूं कि कितने लोगों को यह गलत लगा। थम्स अप!
लुबोस hasko

4

यह REST की अवधारणा में निहित है और वेब किस तरह उपयोग किए जाने के उद्देश्य से था। सॉफ्टवेयर इंजीनियरिंग रेडियो पर एक उत्कृष्ट पॉडकास्ट है जो गेट और पोस्ट के उपयोग के बारे में गहराई से बात करता है।

गेट का उपयोग सर्वर से डेटा खींचने के लिए किया जाता है, जहां एक अद्यतन कार्रवाई की आवश्यकता नहीं होनी चाहिए। यह विचार किया जा रहा है कि आपको एक से अधिक GET अनुरोध का उपयोग करने में सक्षम होना चाहिए और एक ही जानकारी लौटा दी जानी चाहिए। URL में क्वेरी स्ट्रिंग में जानकारी प्राप्त होती है, क्योंकि यह आसानी से अन्य प्रणालियों और लोगों को एक पते की तरह भेजे जाने में सक्षम होने के लिए थी, जहां कुछ खोजने के लिए।

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


"सॉफ्टवेयर इंजीनियरिंग रेडियो पर एक उत्कृष्ट पॉडकास्ट है जो गेट और पोस्ट के उपयोग के बारे में गहराई से बात करता है।" कहाँ है?
9

मैंने इसमें एक लिंक जोड़ा है।
kemiller2002

यह है कि लिंकेज: se-radio.net/2008/05/episode-98-stefan-tilkov-on-rest मैंने ऊपर लिंक भी संपादित किया है, हालांकि मेरे पास अधिकार संपादित नहीं हैं और यह सहकर्मी की समीक्षा की जानी चाहिए, आदि।
MrBoJangles

मान लीजिए मेरे पास एक एंडपॉइंट है जो फ़ाइल को इनपुट के रूप में स्वीकार करता है, फ़ाइल पर कुछ प्रसंस्करण करता है (उदाहरण - regex पर आधारित डेटा निकालें) और JSON डेटा देता है, तो क्या मैं सर्वर पर फ़ाइल अपलोड करने के लिए GET अनुरोध का उपयोग कर सकता हूं। या मुझे POST अनुरोध का उपयोग करना चाहिए?
चर

4

1.3 त्वरित चेकलिस्ट HTTP GETया चुनने के लिएPOST

GET का उपयोग करें यदि:

    The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).

पोस्ट का उपयोग करें यदि:

    The interaction is more like an order, or
    The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or
    The user be held accountable for the results of the interaction.

स्रोत


3

मैं एक समस्या का उपयोग कर नहीं देखता, हालांकि, मैं इसे सरल चीजों के लिए उपयोग करता हूं जहां यह क्वेरी स्ट्रिंग पर चीजों को रखने के लिए समझ में आता है।

अद्यतन करने के लिए इसका उपयोग करना - delete.php?id=5एक पृष्ठ को हटाने के लिए जीईटी की तरह - बहुत जोखिम भरा है। लोगों ने पाया कि जब Google के वेब एक्सेलेरेटर ने पृष्ठों पर URL प्रीफ़ेट करना शुरू किया था - तो इसने सभी 'डिलीट' लिंक को हिट किया और लोगों के डेटा मिटा दिए। खोज इंजन मकड़ियों के साथ एक ही बात हो सकती है।


3

POST बड़े डेटा को स्थानांतरित कर सकता है जबकि GET नहीं कर सकता।

लेकिन आम तौर पर यह जीईटी की कमी के बारे में नहीं है, बल्कि एक सम्मेलन यदि आप चाहते हैं कि आपकी वेबसाइट / वेबएप अच्छी तरह से व्यवहार करे।

Http://www.w3.org/2001/tag/doc/whenToUseGet.html पर एक नज़र डालें


3

से RFC 2616 :

9.3 GET
विधि का अर्थ है अनुरोध-URI द्वारा पहचानी गई किसी भी जानकारी (एक इकाई के रूप में) को पुनः प्राप्त करना। यदि अनुरोध-URI डेटा-उत्पादक प्रक्रिया को संदर्भित करता है, तो यह उत्पादित डेटा है जिसे प्रतिक्रिया में इकाई के रूप में लौटाया जाएगा और प्रक्रिया के स्रोत पाठ को नहीं, जब तक कि पाठ प्रक्रिया का आउटपुट नहीं होता।


9.5 पोस्ट
POST विधि का उपयोग अनुरोध करने के लिए किया जाता है कि मूल सर्वर अनुरोध में संलग्न इकाई को अनुरोध-लाइन में अनुरोध-यूआरआई द्वारा पहचाने गए संसाधन के एक नए अधीनस्थ के रूप में स्वीकार करता है। POST को निम्नलिखित कार्यों को कवर करने के लिए एक समान विधि की अनुमति देने के लिए डिज़ाइन किया गया है:

  • मौजूदा संसाधनों की व्याख्या;
  • बुलेटिन बोर्ड, समाचार समूह, मेलिंग सूची या लेखों के समान समूह के लिए एक संदेश पोस्ट करना;
  • डेटा का एक ब्लॉक प्रदान करना, जैसे कि डेटा सबमिट करने की प्रक्रिया के लिए फ़ॉर्म सबमिट करना;
  • एक परिशिष्ट ऑपरेशन के माध्यम से एक डेटाबेस का विस्तार।

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

POST विधि द्वारा की गई कार्रवाई के परिणामस्वरूप एक संसाधन नहीं हो सकता है जिसे URI द्वारा पहचाना जा सकता है। इस मामले में, 200 (ओके) या 204 (कोई सामग्री) उपयुक्त प्रतिक्रिया की स्थिति है, इस पर निर्भर करता है कि प्रतिक्रिया में एक इकाई शामिल है जो परिणाम का वर्णन करती है।


2

मैं POST का उपयोग करता हूं जब मैं नहीं चाहता कि लोग QueryString को देखें या जब QueryString बड़ी हो जाए। इसके अलावा, फ़ाइल अपलोड के लिए POST आवश्यक है।

हालांकि मुझे GET का उपयोग करने में कोई समस्या नहीं दिख रही है, मैं इसे सरल चीजों के लिए उपयोग करता हूं जहां यह QueryString पर चीजों को रखने के लिए समझ में आता है।

GET का उपयोग करने से किसी विशेष पेज को लिंक करना संभव होगा, जहां POST काम नहीं करेगा।


हम फ़ाइल अपलोड के लिए GET का उपयोग क्यों नहीं कर सकते?
चर

1

मूल मंशा यह थी कि डेटा प्राप्त करने के लिए GET का उपयोग किया गया था और POST कुछ भी होना था। अंगूठे का नियम जो मैं उपयोग करता हूं वह यह है कि अगर मैं सर्वर पर कुछ भी वापस भेज रहा हूं, तो मैं POST का उपयोग करता हूं। अगर मैं डेटा वापस पाने के लिए सिर्फ एक URL कह रहा हूं, तो मैं GET का उपयोग करता हूं।


1

विकिपीडिया में HTTP के बारे में लेख पढ़ें । यह बताएगा कि प्रोटोकॉल क्या है और यह क्या करता है:

प्राप्त

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

तथा

पहचाने गए संसाधन पर पोस्ट किए जाने वाले डेटा (जैसे, HTML फॉर्म से) संसाधित किया जाता है। डेटा अनुरोध के शरीर में शामिल है। इसके परिणामस्वरूप एक नया संसाधन या मौजूदा संसाधनों या दोनों के अपडेट का निर्माण हो सकता है।

W3C में URI, Addressability, और HTTP GET और POST नाम का एक दस्तावेज है जो बताता है कि कब क्या उपयोग करना है। हवाला देते हुए

1.3 HTTP चेक या POST चुनने के लिए त्वरित चेकलिस्ट

  • GET का उपयोग करें यदि:
    • इंटरैक्शन एक प्रश्न की तरह अधिक है (यानी, यह एक सुरक्षित ऑपरेशन है जैसे कि क्वेरी, रीड ऑपरेशन या लुकअप)।

तथा

  • पोस्ट का उपयोग करें यदि:
    • बातचीत एक आदेश की तरह अधिक है, या
    • इंटरैक्शन संसाधन की स्थिति को इस तरह से बदलता है, जिसे उपयोगकर्ता अनुभव करेगा (उदाहरण के लिए, एक सेवा के लिए एक सदस्यता), या ओ उपयोगकर्ता को बातचीत के परिणामों के लिए जिम्मेदार ठहराया जा सकता है।

हालांकि, HTTP GET या POST का उपयोग करने के अंतिम निर्णय से पहले, संवेदनशील डेटा और व्यावहारिक विचारों के लिए विचार भी करें।

जब भी आप HTML फॉर्म सबमिट करते हैं तो एक प्रैक्टिकल उदाहरण होगा। आप या तो निर्दिष्ट पद या प्राप्त प्रपत्र कार्रवाई के लिए। PHP तदनुसार $ _GET और $ _POST को आबाद करेगी।


1

PHP में, POSTडेटा सीमा आमतौर पर आपके द्वारा निर्धारित की जाती है php.iniGETसर्वर / ब्राउज़र सेटिंग्स द्वारा सीमित है जो मुझे विश्वास है - आमतौर पर 255बाइट्स के आसपास ।


1

से w3schools.com :

HTTP क्या है?

हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल (HTTP) क्लाइंट और सर्वर के बीच संचार को सक्षम करने के लिए डिज़ाइन किया गया है।

HTTP क्लाइंट और सर्वर के बीच अनुरोध-प्रतिक्रिया प्रोटोकॉल के रूप में काम करता है।

एक वेब ब्राउज़र क्लाइंट हो सकता है, और एक कंप्यूटर पर एक एप्लिकेशन जो एक वेब साइट को होस्ट करता है, सर्वर हो सकता है।

उदाहरण: एक क्लाइंट (ब्राउज़र) सर्वर से एक HTTP अनुरोध सबमिट करता है; तब सर्वर क्लाइंट को प्रतिक्रिया देता है। प्रतिक्रिया में अनुरोध के बारे में स्थिति की जानकारी होती है और इसमें अनुरोधित सामग्री भी हो सकती है।

दो HTTP रिक्वेस्ट मेथड्स: GET and POST

क्लाइंट और सर्वर के बीच रिक्वेस्ट-रिस्पांस के लिए आमतौर पर इस्तेमाल किए जाने वाले दो तरीके हैं: GET और POST।

GET - एक निर्दिष्ट संसाधन POST से डेटा का अनुरोध करता है - एक निर्दिष्ट संसाधन पर संसाधित होने के लिए डेटा प्रस्तुत करता है

यहाँ हम प्रमुख अंतरों को समझते हैं:

यहां छवि विवरण दर्ज करें


1
यह बेहतर होगा कि खोजकर्ताओं और पाठकों को उत्तर में छवि की सामग्री दर्ज की जाए। साथ ही, उत्तर का पहला भाग वास्तव में प्रश्न का उत्तर देने में मदद नहीं करता है।
डेव श्विसगुथ

यहां से कॉपी पेस्ट करें - आपको अपने स्रोत को ठीक से उद्धृत करना चाहिए और स्रोत के लाइसेंस को पुन: उपयोग की अनुमति देनी चाहिए, जो मुझे नहीं लगता कि w3school.com करता है। इसके अलावा, क्या आपको वास्तव में लगता है कि यह कुछ ऐसा है जो अन्य 25 उत्तरों में शामिल नहीं था?
बेंजामिन डब्ल्यू।

1

POST का सरल संस्करण PUT DELETE प्राप्त करें

  • GET का उपयोग करें - जब आप किसी भी Id या Name के आधार पर डेटा की सूची जैसा कोई संसाधन प्राप्त करना चाहते हैं
  • POST का उपयोग करें - जब आप सर्वर पर कोई डेटा भेजना चाहते हैं। ध्यान रखें कि POST भारी वजन ऑपरेशन है क्योंकि अपडेशन के लिए हमें POST के बजाय आंतरिक रूप से PUT का उपयोग करना चाहिए POST नया संसाधन बनाएगा
  • PUT का उपयोग करें - जब आप

4
"PUT का उपयोग करें - जब आप" शेष वाक्य कहाँ है?
पैंग

यह बहुत अच्छा है कि किसी को इस जवाब की पहली दो गोलियां इतनी स्पष्ट रूप से पसंद
आईं

0

एक बड़ी बात यह है कि आपके द्वारा सबमिट की जाने वाली कोई भी चीज़ GETURL के माध्यम से उजागर होने वाली है। दूसरे जैसा कि सिजयोज़ कहते हैं, एक URL के लिए वर्णों की सीमा होती है।


0

एक और अंतर यह है कि आमतौर पर POST को दो HTTP ऑपरेशंस की आवश्यकता होती है, जबकि GET को केवल एक की आवश्यकता होती है।

संपादित करें: मुझे स्पष्ट करना चाहिए - सामान्य प्रोग्रामिंग पैटर्न के लिए। आम तौर पर एक सीधे HTML वेब पेज के साथ एक POST का जवाब देना कई कारणों से एक संदिग्ध डिजाइन है, जिसमें से एक कष्टप्रद है "आपको इस फॉर्म को फिर से जमा करना होगा, क्या आप ऐसा करना चाहते हैं?" बैक बटन दबाने पर।


2
POST को 2 http संचालन की आवश्यकता नहीं है।
बिली ओनली

3
पुनर्निर्देशन के बाद 2 ऑपरेशनों की आवश्यकता होती है: en.wikipedia.org/wiki/Post/Redirect/Get
cherouvim

1
POST को सर्वर के लिए 2 राउंड ट्रिप्स की आवश्यकता हो सकती है - एक expect: 100-continueहेडर के साथ एक सामान्य पैटर्न POST है , और उसके बाद सर्वर द्वारा जवाब देने के बाद ही डेटा भेजें 100 CONTINUE
फ्रैंक किसान

अच्छा लेख चेरोविम, मुझे कभी नहीं पता था कि पैटर्न का नाम था।
पिल्लेक्स

@cherouvim: पोस्ट पुनर्निर्देशित हो जाता है, लेकिन सादा पोस्ट नहीं करता है। आप बस उसी परिणाम के साथ पुनर्निर्देशित प्राप्त कर सकते हैं। आपके द्वारा सबमिट किए गए फ़ॉर्म का प्रोटोकॉल से कोई लेना-देना नहीं है।
बिली ओनेल

0

जैसा कि दूसरों ने उत्तर दिया है, पाने के साथ url आकार की सीमा है, और फाइलें केवल पोस्ट के साथ प्रस्तुत की जा सकती हैं।

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

एक स्क्रिप्ट लेखक को डेटाबेस बदलने के लिए पदों का उपयोग करना चाहिए और उपयोग केवल जानकारी की पुनर्प्राप्ति के लिए प्राप्त करना चाहिए

स्क्रिप्टिंग भाषाओं ने कई साधन प्रदान किए, जिनके साथ अनुरोध का उपयोग किया जा सकता है। उदाहरण के लिए, PHP $_REQUESTकिसी पोस्ट या प्राप्त को पुनः प्राप्त करने के उपयोग की अनुमति देता है । अधिक विशिष्ट $_GETया के पक्ष में इससे बचना चाहिए $_POST

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


0

Gorgapor, mod_rewriteअभी भी अक्सर उपयोग करता है GET। यह सिर्फ एक मित्र URL को GETक्वेरी स्ट्रिंग वाले URL में अनुवाद करने की अनुमति देता है ।


-1

HTTP पोस्ट डेटा में डेटा की मात्रा पर एक निर्दिष्ट सीमा नहीं होती है, जहाँ विभिन्न ब्राउज़रों में GET के लिए अलग-अलग सीमाएँ होती हैं। RFC 2068 राज्य:

255 बाइट्स से अधिक यूआरआई लंबाई के आधार पर सर्वर को सतर्क रहना चाहिए, क्योंकि कुछ पुराने क्लाइंट या प्रॉक्सी कार्यान्वयन इन लंबाई का ठीक से समर्थन नहीं कर सकते हैं

विशेष रूप से आपको सही HTTP का निर्माण करना चाहिए, जिसका वे उपयोग कर रहे हैं। HTTP GET के साइड-इफेक्ट्स नहीं होने चाहिए और इसे HTTP प्रोक्सीज़ आदि द्वारा सुरक्षित रूप से ताज़ा और संग्रहीत किया जा सकता है।

जब आप किसी url रिसोर्स के विरुद्ध डेटा सबमिट करना चाहते हैं, तो HTTP POST का उपयोग किया जाता है।

HTTP GET का उपयोग करने के लिए एक विशिष्ट उदाहरण खोज, अर्थात खोज पर है? क्वेरी = my + क्वेरी HTTP POST का उपयोग करने के लिए एक विशिष्ट उदाहरण एक ऑनलाइन फॉर्म का फीडबैक प्रस्तुत कर रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.