2009-04-03 12 views
67

क्या अजाक्स अनुरोधों के लिए प्राप्त और पोस्ट के बीच अंतर है में?बनाम पोस्ट प्राप्त अजाक्स

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

संपादित करें: क्या डाल और हैं DELETE के लिए इस्तेमाल किया तरीकों?

+7

BTW, वहाँ भी रख दिया और अनुरोध पोस्ट के अलावा अनुरोध हटा रहे हैं। आपको उन लोगों के बारे में भी पूछना चाहिए। –

+1

भावी पाठकों के लिए: यहां एक [एक साल पहले फूकर द्वारा संबंधित प्रश्न] है (http://stackoverflow.com/q/18395523/4043409)। – Gideon

उत्तर

129

जीईटी सर्वर से डेटा प्राप्त करने के लिए डिज़ाइन किया गया है। पोस्ट (और कम ज्ञात मित्र PUT और DELETE) सर्वर पर डेटा संशोधित करने के लिए डिज़ाइन किए गए हैं।

एक GET अनुरोध को किसी एप्लिकेशन से डेटा को हटाने का कारण नहीं बनना चाहिए। यदि आपके पास कोई लिंक है तो आप डेटा को निकालने के लिए GET के साथ क्लिक कर सकते हैं, फिर Google आपकी साइट को स्पिडरिंग आपके सभी "हटाएं" लिंक पर क्लिक कर सकता है।

विहित जवाब here, जो HTML 2.0 कल्पना उद्धरण पाया जा सकता है:

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

एक रूप की प्रोसेसिंग से संबद्ध सेवा दुष्प्रभाव नहीं हैं (उदाहरण के लिए, एक डेटाबेस या एक सेवा करने के लिए सदस्यता के संशोधन), पद्धति POST होना चाहिए।

आपके AJAX कॉल में, आपको अपने सर्वर का समर्थन करने वाली किसी भी विधि का उपयोग करने की आवश्यकता है। आपको हमेशा अपने सर्वर को डिज़ाइन करना चाहिए ताकि डेटा को संशोधित करने वाले ऑपरेशंस को POST/PUT/DELETE द्वारा बुलाया जाता है। अन्य टिप्पणियों में आरईएसटी के लिंक हैं, जो आम तौर पर सी/आर/यू/डी को "पोस्ट या पुट" (बनाएं)/प्राप्त करें (पढ़ें)/PUT (अपडेट)/हटाएं (हटाएं)।

+6

+1 के आधार पर अलग हैं: जीईटी - idempotency की आवश्यक परिभाषा। पोस्ट, पुट और डिलीट के साथ सभी बदलाव होना चाहिए। –

+0

मेरा सर्वर 403 त्रुटि दे रहा है अगर मैं पोस्ट का उपयोग करके फॉर्म जमा करता हूं, काम कर रहा हूं। मुझे लगता है कि यह सर्वर विन्यास के कारण है। मेरे पास सर्वर तक कोई पहुंच नहीं है। इसके आसपास कैसे हो? –

+0

मैं @ एसएलॉट से सहमत हूं। जीईटी विधि की पूरी तरह से अच्छी और पूरी तरह से परिभाषा।/क्लैप साथी। –

24

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

जीईटी अनुरोधों को भेजे जा सकने वाले डेटा की मात्रा की सीमा है। मैं सही संख्या भूल जाता हूं, लेकिन यदि आप कुछ भी भेज रहे हैं तो इससे समस्याएं पैदा हो सकती हैं।

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

+2

हां, यह इंगित करना महत्वपूर्ण है कि जीईटी से जुड़े आकार सीमाएं हैं और वे क्लाइंट और सर्वर सॉफ़्टवेयर –

19

चाहे उसका AJAX है या नहीं अप्रासंगिक है। आप जो कार्रवाई कर रहे हैं उसके बारे में। मैं REST के सिद्धांतों का पालन करने की सिफारिश करता हूं। जिनके पास अद्यतन, हटाने, इत्यादि के लिए और प्रावधान हैं ...

+3

+1: विश्वसनीय सिद्धांत आवश्यक हैं। –

3

कई वेब सर्वर यूआरएल के हिस्से के रूप में पारित किए जा सकने वाले डेटा की लंबाई को सीमित कर सकते हैं, इसलिए जीईटी अनुरोध अजीब तरीकों से तोड़ सकता है जो डीबग करना मुश्किल है ।

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

एक आरईएसटी परिप्रेक्ष्य से, जीईटी अनुरोधों का कोई दुष्प्रभाव नहीं होना चाहिए - उन्हें डेटा संशोधित नहीं करना चाहिए। इसलिए, यदि आप आईडी द्वारा संसाधन प्राप्त कर रहे हैं, तो यह समझ में आता है, लेकिन यदि आप किसी संसाधन में परिवर्तन कर रहे हैं, तो आपको http क्रिया के लिए PUT, POST, या UPDATE का उपयोग करना चाहिए।

-2

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

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

भी कुछ चौखटे कि खंड आधारित यूआरएल पर पूरी तरह से भरोसा कर रहे हैं (site.com/products/133 बजाय site.com/products.php?id=333 और इन चौखटे सुरक्षा के लिए प्राप्त चर अनसेट जैसे। ऐसे मामलों में आप समय allt पोस्ट का प्रयोग करेंगे।

0

अंतर आप अजाक्स, एचटीएमएल form रों, या curl उपयोग कर रहे हैं GET और POST के बीच में ही है यहाँ प्रासंगिक परिभाषाएं दी गई हैं:।

1

मेरे बारे में, मैं पोस्ट पसंद करता हूं। मैं उन घटनाओं को आरक्षित करता हूं जो मुझे पता है कि प्रेषित मूल्य उस डेटा तक ही सीमित है जिसका मेरे पास "नियंत्रण" है, उदाहरण के लिए, किसी आईडी के साथ किसी आइटम को पुनः प्राप्त करने के लिए। उदाहरण, "getitem? Id = 123", "deleteImtem? Id = 123", ... अन्य मामलों के लिए, जब मेरे पास उपयोगकर्ता द्वारा फ़ॉर्म भरने योग्य होता है, तो मैं पोस्ट पसंद करता हूं।

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

आरईएसटी परिप्रेक्ष्य के लिए, मेरी राय में, आप इसे एक नई परियोजना (संपूर्ण परियोजना के साथ एक स्थिरता रखने के लिए) का उपयोग कर सकते हैं।

अंत में, शायद कुछ प्रोग्राम नेटवर्क में उपयोग किए जाते हैं (यूआरएल लॉगयूर्स (यानी: यह देखने के लिए कि क्या कर्मचारियों ने गैर-स्वामित्व वाली साइटों पर अपना समय खो दिया है ...) proxys, ...) या किसी अन्य प्रकार के टूल क्वेरी को रोक सकते हैं। सोम एक अलग वेब पेज की तरह विचार करते हुए, जीईटी के साथ भेजे गए पैराम्स की रिपोर्ट में दिखाए जाएंगे। लेकिन इस स्थिति में, आपकी समस्या नहीं हो सकती है यह एक परियोजना से दूसरे में बदलती है! ;)

4

सीईआरएफ (क्रॉस साइट अनुरोध जालसाजी) हमलों में जीईटी अनुरोधों का फायदा उठाना आसान है। नकली POST अनुरोधों के लिए उपयोगकर्ता पक्ष पर जावास्क्रिप्ट को सक्षम करने की आवश्यकता होती है, जबकि फर्जी जीईटी अनुरोध अभी भी आईएमजी, स्क्रिप्ट टैग के साथ संभव है।

0

पहला, सामान्य जानकारी। GET प्रयोग करें यदि आप केवल डेटा को पढ़ने, POST उपयोग करें यदि आप डेटाबेस पर कुछ बदलने, आदि फ़ाइलें

txt लेकिन समस्या यह है, कुछ ब्राउज़रों कैश GET का परिणाम है। मुझे आईई 7 में AJAX अनुरोधों के साथ समस्याएं थीं, लेकिन आखिरकार मुझे पता चला कि ब्राउज़र कैश GET परिणाम है।मैंने प्रवाह पर पुनर्विचार किया और POST पर मेरा अनुरोध बदल दिया।

तो, यदि आप कैशिंग नहीं चाहते हैं तो GET का उपयोग न करें।

(बेशक आप प्राप्त आपरेशनों में कैशिंग निष्क्रिय कर सकते हैं। लेकिन मैं इसे पसंद नहीं किया था)

2

दोनों कुछ डेटा भेजने और उस डेटा का उपयोग कर कुछ प्रतिक्रिया प्राप्त करने के लिए उपयोग किया जाता है।

प्राप्त करें: सर्वर में सूचना स्टोर प्राप्त करें। अर्थात। खोज, ट्वीट, व्यक्ति की जानकारी। अगर आप जानकारी भेजना चाहते हैं तो process.php का उपयोग कर अनुरोध भेजें अनुरोध करें? Name = subroto तो यह मूल रूप से यूआरएल के माध्यम से जानकारी भेजता है। यूआरएल 2083 से अधिक चार संभाल नहीं सकता है। तो ब्लॉग पोस्ट के लिए आपको याद है कि यह संभव नहीं है?

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

AJAX: $ .get() और $ .post() में ऐसी विशेषताएं हैं जो $ .ajax() के उप-समूह हैं। इसमें बहुत विन्यास है।

$ .get() विधि, जो $ के लिए एक प्रकार का शॉर्टेंड है .एजाक्स()। ऑब्जेक्ट में गुजरने के बजाय $ .get() का उपयोग करते समय, आप तर्कों में गुजरते हैं। कम से कम, आपको पहले दो तर्कों की आवश्यकता होगी, जो फ़ाइल को आप पुनर्प्राप्त करना चाहते हैं (यानी 'test.txt') और सफलता कॉलबैक।

सारांश:

$.get(url [, data ] [, success ] [, dataType ]) 
$.post(url [, data ] [, success ] [, dataType ]) // for sending secure or Large information 
$.ajax(url [, settings ]) // More Configaration 
संबंधित मुद्दे