2009-12-09 17 views
21

AJAX में GET और POST अनुरोध क्यों हैं क्योंकि यह पृष्ठ URL को किसी भी तरह प्रभावित नहीं करता है? एजेक्स में जीईटी पर संवेदनशील डेटा पास करके यह क्या अंतर करता है क्योंकि डेटा पेज यूआरएल पर प्रतिबिंबित नहीं हो रहा है?AJAX में बनाम पोस्ट बनाओ?

+2

डेटा जीईटी का उपयोग कर पेज यूआरएल में परिलक्षित होता है। एक टीसीपी/आईपी मॉनिटर के साथ क्या हो रहा है या यहां तक ​​कि केवल फ़ायरफ़ॉक्स के लिए हेडर मॉनिटर एड-ऑन के साथ क्या हो रहा है। –

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/715335/get-vs-post-in-ajax/ – trante

उत्तर

41

आपको अपनी वेब सेवा से जो आवश्यक है उसके अनुसार आपको उचित HTTP क्रिया का उपयोग करना चाहिए।


जब की तरह एक संग्रह यूआरआई के साथ काम: http://example.com/resources/

प्राप्त: संग्रह के सदस्यों, आगे नेविगेशन के लिए अपने सदस्य यूआरआई के साथ पूरा सूचीबद्ध करें। उदाहरण के लिए, बिक्री के लिए सभी कारों की सूची।

पुट: अर्थ "पूरे संग्रह को दूसरे संग्रह के साथ प्रतिस्थापित करें" के रूप में परिभाषित किया गया है।

POST: संग्रह में एक नई प्रविष्टि बनाएं जहां आईडी संग्रह द्वारा स्वचालित रूप से असाइन की जाती है। बनाई गई आईडी को आमतौर पर इस ऑपरेशन द्वारा लौटाए गए डेटा के हिस्से के रूप में शामिल किया जाता है।

DELETE: अर्थ "संपूर्ण संग्रह को हटाएं" के रूप में परिभाषित किया गया है।


जब की तरह एक सदस्य यूआरआई के साथ काम: http://example.com/resources/7HOU57Y

प्राप्त: संग्रह के लिए एक उपयुक्त MIME प्रकार में व्यक्त की संबोधित सदस्य का प्रतिनिधित्व प्राप्त करें।

पुट: संग्रह के संबोधित सदस्य को अद्यतन करें या निर्दिष्ट आईडी के साथ बनाएं।

POST: संबोधित सदस्य को अपने अधिकार में संग्रह के रूप में मानता है और इसका एक नया अधीनस्थ बनाता है।

DELETE: संग्रह के संबोधित सदस्य को हटाएं।


स्रोत: Wikipedia

+1

क्या कोई वास्तव में PUT और DELETE से परेशान करता है? – carl

+10

"क्या कोई वास्तव में पुट और डिलीट से परेशान करता है?" - कभी अमेज़ॅन एस 3 के बारे में सुना? –

+3

हां, रीस्टफुल वेब सेवाओं को परिभाषित करते समय, आप बिल्कुल करते हैं। – Red3

18

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

+0

इसके अलावा, आप एप्लिकेशन विकसित करते समय दोनों अनुरोध प्रकारों का उपयोग कर सकते हैं। उनमें से अधिकांश के लिए 'is_ajax' ध्वज पर्याप्त है। ऐसे विकल्प होने के लिए बेहतर नहीं है। –

+1

मैं dnl.vssll के उत्तर को स्वीकार कर रहा हूं क्योंकि HTTP या AJAX द्वारा यूआरएल लंबाई सीमा लागू नहीं की जाती है, तो आप इस उत्तर को http://stackoverflow.com/questions/812925/what-is-the- अधिकतम- संभावित- लम्बाई-ए-क्वेरी-स्ट्रिंग। यह ब्राउज़र/सर्वर द्वारा सीमित है और इसकी सीमितता वास्तव में चर्चा का मुद्दा क्यों है ..चूंकि HTTP टेक्स्ट आधारित है, ब्राउज़र संपूर्ण रूप से HTTP अनुरोध भेजता है .. इसमें क्वेरी स्ट्रिंग भी शामिल है, इसलिए यदि अनुरोध की लंबाई (आदर्श केस मानना) पर कोई सीमा नहीं है तो क्वेरी स्ट्रिंग को सीमित करने में क्या बिंदु है? – Xinus

+5

मैं लंबाई सीमा की रक्षा करने के लिए कोई तर्क नहीं दे रहा था, मैं बस यह कह रहा था कि यह वहां था, और आपको इसे विचार करना होगा, क्योंकि वेब विकास करते समय, आप वास्तव में * ब्राउज़र की उपेक्षा नहीं कर सकते *। लेकिन हे, आपको अपने स्वीकारों को प्रेरित करने की आवश्यकता नहीं है; डीएनएल का जवाब भी एक अच्छा था =) –

6

दो मुख्य कारणों में:

  1. GET अनुरोध आकार पर कुछ बहुत प्रतिबंधक सीमाएं हैं; POST आमतौर पर अधिक जानकारी रखने में सक्षम हैं।

  2. बैकएंड GET या POST की अपेक्षा की जा सकती है, यह कैसे डिजाइन किया गया है इसके आधार पर। अगरकरने की लचीलापन की आवश्यकता है, तो बैकएंड एक की अपेक्षा करता है, या POST यदि यह वही है जो इसकी अपेक्षा करता है।

4

आप आम तौर पर, AJAX स्क्रिप्ट के पैरामीटर भेज यह इन मानकों के आधार पर डेटा देता है। यह एक ऐसे फॉर्म की तरह काम करता है जिसमें विधि = "प्राप्त करें" या विधि = "पोस्ट" है। जीईटी विधि का उपयोग करते समय, पैरामीटर क्वेरी स्ट्रिंग में पास किए जाते हैं। पोस्ट विधि का उपयोग करते समय, पैरामीटर पोस्ट बॉडी में भेजे जाते हैं।

आम तौर पर, यदि आपके पैरामीटर में बहुत कम वर्ण हैं और इसमें संवेदनशील जानकारी नहीं है तो आप उन्हें GET विधि के माध्यम से भेजते हैं। संवेदनशील डेटा (जैसे पासवर्ड) या लंबा टेक्स्ट (उदा। किसी व्यक्ति का 8000 वर्ण लंबा जैव) POST विधि के माध्यम से बेहतर भेजा जाता है।

+0

AFAIK GET और POST विधियां केवल उनके अनुरोध प्रारूप में भिन्न होती हैं, इसलिए मुझे नहीं लगता कि POST GET से अधिक सुरक्षित है। जीईटी असुरक्षित माना जाता है क्योंकि पैरामीटर यूआरएल पर प्रतिबिंबित होते हैं लेकिन AJAX उस समस्या को खत्म करता है। इसके अलावा सभी आधुनिक ब्राउज़र जीईटी अनुरोध के माध्यम से भेजे जा सकने वाले डेटा की मात्रा को सीमित नहीं करते हैं .. .. प्रतिक्रियाओं से मैं केवल संभावित स्पष्टीकरण देख सकता हूं कि AJAX को अच्छी तरह से स्थापित HTTP प्रोटोकॉल के साथ अस्तित्व में डिज़ाइन किया गया है .. जो तार्किक है। – Xinus

+0

@Xinus: आखिरी मैंने सुना है, दोनों ब्राउज़र * और * सर्वर ने अभी भी महत्वपूर्ण यूआरएल लंबाई (उदा।, 'जीईटी') सीमा लगाई है, जैसा कि HTTP स्पेक आईआईआरसी करता है। क्या आप अपने बयान के लिए एक संदर्भ पोस्ट कर सकते हैं कि वे नहीं करते? –

+1

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

0

अन्य ने मुख्य बिंदु (संदर्भ/idempotency, और आकार) को कवर किया है, लेकिन मैं एक और जोड़ना होगा: एन्क्रिप्शन। यदि आप SSL का उपयोग कर रहे हैं और अपने इनपुट तर्क एन्क्रिप्ट करना चाहते हैं, तो आपको POST का उपयोग करने की आवश्यकता है।

+1

यह गलत है। एसएसएल पर स्थानांतरित सभी डेटा एन्क्रिप्टेड है। बनाम पोस्ट प्राप्त करें कोई फर्क नहीं पड़ता। –

+1

मैं जोएल एल से सहमत हूं। पूरा संचार एन्क्रिप्ट किया गया है, इसलिए किस विधि का उपयोग किया गया है? – Xinus

9

GET और POST के बीच एक और अंतर ब्राउज़र में कैशिंग को संभालने का तरीका है। POST प्रतिक्रिया कभी कैश नहीं किया जाता है। GET आपके प्रतिक्रिया शीर्षकों में निर्दिष्ट कैशिंग नियमों के आधार पर कैश किया जा सकता है या नहीं भी किया जा सकता है।

0

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

1

धन्यवाद .. मैं मुख्य रूप से अजाक्स के साथ GET पद्धति का उपयोग और मुझे नहीं निम्नलिखित को छोड़कर अब तक किसी भी समस्याओं मिल गया है: एक ही का उपयोग कर यदि बुला

इंटरनेट एक्सप्लोरर (फ़ायरफ़ॉक्स और गूगल क्रोम के विपरीत) कैश प्राप्त मूल्य प्राप्त करें।

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

6

यह http प्रोटोकॉल के नियमों का सम्मान करने के लिए बस नीचे है।

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

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

संबंधित मुद्दे