2010-01-03 24 views
5

यह बुरा व्यवहार निम्नलिखित पोस्ट अनुरोध जारी करने के लिए है:HTTP GET और पोस्ट मापदंडों सिफारिशों

/test?a=1&b=2 
POST data: c=3&d=4 

सूचना है कि 2 पैरामीटर URL का हिस्सा हैं और 2 पैरामीटर पोस्ट सामग्री का हिस्सा हैं।

  • GET अनुरोध:

    एक और नोट पर, निम्नलिखित नियम अब भी सिफारिश की है सर्वर से सामग्री प्राप्त कर सकते हैं, लेकिन सर्वर पर कुछ भी नहीं बदलते।

  • पोस्ट अनुरोध: सर्वर जो सर्वर

क्योंकि मैं ऑनलाइन सब कुछ का एक सा देख रहा पूछ रहा हूँ पर डेटा को संशोधित कर सकते करने के लिए सामग्री पोस्ट।

लॉरेन लूस

+1

हाँ, लोगों को अभी भी लगता है कि आप 'कुछ भी है कि डेटा को संशोधित कर सकते के लिए POST's का उपयोग करना चाहिए, लेकिन मैं अभी भी * * लगता है कि करोड़ का भार है एपी। इससे आपको कुछ वाकई हैकी चीजें होती हैं जब आप चाहते हैं कि एक सरल हटाएं लिंक है। मुझे लगता है कि जब तक आपके पास सर्वर की तरफ कुछ उचित जांच हो, ताकि वेबक्रॉलर आपकी साइट को पेंच न करें और ऐसा कोई बड़ा सौदा न हो। – mpen

+1

इसके अलावा, पैरामीटर विधियों को मिलाकर ठीक है, लेकिन मुझे नहीं पता कि आप क्यों करेंगे। एक प्रोग्रामिंग दृष्टिकोण से, यह लगातार होने के लिए और अधिक समझ में आता है। एकमात्र अपवाद जो मैं सोच सकता हूं लॉगऑन रूपों के लिए है, कभी-कभी आप लॉगिन पेज पर रीडायरेक्ट करना चाहते हैं, और फिर आप GET में redirect_back_to_this_page लिंक फेंक देते हैं, और फ़ॉर्म में वापस कॉपी करने के लिए बहुत सारी पॉइंट कॉपी नहीं होती है। – mpen

उत्तर

6

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

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

मैं Wikipedia entry on HTTP protocol पढ़ने की सिफारिश करेंगे:

प्राप्त

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

पोस्ट

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

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

1

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

+1

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

+1

शायद वह खोज इंजन द्वारा बुकमार्क/अनुक्रमित करना था। आप वास्तव में डेटा संशोधित अनुरोधों को अनुक्रमित नहीं करना चाहते हैं ... –

3

वह नियम निश्चित रूप से अभी भी अनुशंसित है।

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

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

2

हां, जीईटी और पोस्ट के अर्थशास्त्र का सम्मान किया जाना चाहिए।

को देखते हुए इस तथ्य है, तो अक्सर मिलता है और कुछ पोस्ट में कुछ पैरामीटर डाल वार्स के लिए एक बहुत अच्छा कारण है कि - इस मामले में जहां आप एक वेब आधारित स्क्रिप्ट जो की तरह कुछ करता है पर विचार करें:

UPDATE datatable SET quantity=30 WHERE order=21559 

इस के रूप में प्रतिनिधित्व किया जा सकता है:

/update?order=21559 
POST data: quantity=30 

सी

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