क्या अधिकांश वेब ब्राउज़र में PUT, DELETE, HEAD, आदि विधियाँ उपलब्ध हैं?


608

मैंने यहाँ कुछ सवालों को देखा है जैसे RESTful सेवाओं को कैसे डीबग करें , जिसमें उल्लेख है:

दुर्भाग्य से वही ब्राउज़र मुझे HTTP PUT, DELETE और कुछ हद तक HTTP POST का परीक्षण करने की अनुमति नहीं देगा।

मैंने यह भी सुना है कि ब्राउज़र केवल GET और POST का समर्थन करते हैं, जैसे कुछ अन्य स्रोतों से:

हालांकि, फ़ायरफ़ॉक्स में कुछ त्वरित परीक्षण दिखाते हैं कि भेजने PUTऔर DELETEअनुरोधों के अनुसार काम करता है - XMLHttpRequestसफलतापूर्वक पूरा होता है, और अनुरोध सही विधि के साथ सर्वर लॉग में दिखाई देता है। क्या इसके कुछ पहलू मुझे याद आ रहे हैं, जैसे कि क्रॉस-ब्राउज़र संगतता या गैर-स्पष्ट सीमाएँ?


1
यह सिर्फ क्लाइंट की चिंता करने की जरूरत नहीं है, बहुत सारे सर्वर साइड फ्रेमवर्क केवल GET और POST का समर्थन करते हैं।
डर्बी

7
जॉन, किसी भी कारण से आप टैग नहीं चाहते हैं?
जॉन सॉन्डर्स

11
हालांकि जो लोग इसे पढ़ते हैं, वे RESTful API की जांच कर सकते हैं।
djjeck


नहीं, सभी ब्राउज़र PUT / DELETE विधियों का समर्थन नहीं करते हैं, और सभी सर्वर साइड प्रौद्योगिकियाँ PUT / DELETE का समर्थन नहीं करती हैं। केवल HTML 5 समर्थित ब्राउज़र PUT / DELETE का समर्थन करता है।
जानी देवांग

जवाबों:


463

नहीं। HTML 5 युक्ति उल्लेख:

विधि और फॉर्ममेथोड सामग्री विशेषताएँ निम्नलिखित कीवर्ड और राज्यों के साथ गुणी हैं:

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

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

कीवर्ड डायलॉग , स्टेट डायलॉग पर मैपिंग, यह दर्शाता है कि फॉर्म सबमिट करने का उद्देश्य डायलॉग बॉक्स को बंद करना है, जिसमें फॉर्म खुद को ढूंढता है, यदि कोई हो, और अन्यथा सबमिट नहीं होता है।

इन विशेषताओं के लिए अमान्य मान डिफ़ॉल्ट GET स्थिति है

यानी HTML फ़ॉर्म केवल HTTP अनुरोध विधियों के रूप में GET और POST का समर्थन करते हैं। इसके लिए एक वर्कअराउंड POST के माध्यम से एक छिपे हुए फॉर्म फ़ील्ड का उपयोग करके अन्य तरीकों को सुरंग करना है जो सर्वर द्वारा पढ़ा जाता है और अनुरोध तदनुसार भेजा जाता है।

हालांकि, GET , POST , PUT और DELETE सभी प्रमुख वेब ब्राउज़रों (IE, Firefox, Safari, Chrome, Opera) में XMLHttpRequest (यानी AJAX कॉल) के कार्यान्वयन द्वारा समर्थित हैं


170
नहीं, मेरा निश्चित रूप से मतलब है कि HTML (मैं HTML रूपों क्षमताओं के बारे में बात कर रहा हूं, हालांकि यह पाठ से स्पष्ट नहीं हो सकता है - मैं इसे संपादित करूँगा)
मैथ्यू मर्डोक

6
@ मैथ्यू: इसका मतलब यह है कि अगर मैं IE6 या IE7 का उपयोग करता हूं, तो निम्न के साथ: - <form .. method = "PUT"> ... </ form> यह काम नहीं करेगा क्योंकि PUT HTML 4 के लिए मान्य नहीं है?
शुद्ध। क्रोम

6
@ Pure.Krome (केवल 14 महीने बाद) नहीं, आप HTML 4.01 युक्ति के तहत <form method = "put"> या <form method = "delete"> नहीं कर सकते। केवल GET और POST IE8, Chrome3 या FF3.5 द्वारा समर्थित हैं।
जरेट मेयर

23
@porneL @Alan HTML5 ने उन्हें जोड़ा और फिर उन्हें हटा दिया। वर्तमान में केवल GET और POST की अनुमति है। goo.gl/8EuZk
एडम लाससेक 27'11

13
@porneL HTML5 ने उन्हें जोड़ा, और फिर उन्हें हटा दिया, और अब बग को फिर से खोल दिया गया है। दिलचस्प है, मैंने कुछ दस्तावेज देखे हैं जो अभी भी वहां मौजूद हैं। यदि आप घर पर पालन करना चाहते हैं तो यहां बग है: w3.org/Bugs/Public/show_bug.cgi?id=10671
एमिल

79

HTML, GET और POST का समर्थन करता है। (HTML5 ने एक बिंदु पर PUT / DELETE को जोड़ा, लेकिन उन्हें हटा दिया गया।)

XMLHttpRequest हर विधि का समर्थन करता है, जिसमें CHICKEN भी शामिल है, हालांकि कुछ विधि के नाम केस-असंवेदनशील (तरीकों प्रति HTTP प्रति केस-संवेदी) के विरुद्ध मेल खाते हैं और कुछ विधि के नाम सुरक्षा कारणों से बिल्कुल भी समर्थित नहीं हैं (जैसे CONNECT)।

XMLHttpRequest द्वारा निर्दिष्ट नियमों पर ब्राउज़र धीरे-धीरे परिवर्तित हो रहे हैं, लेकिन जैसा कि अन्य टिप्पणी में कहा गया है कि अभी भी कुछ मतभेद हैं।


5
लगता है कि नवीनतम HTML5 ड्राफ्ट ने PUT और DELETE समर्थन को गिरा दिया है: dev.w3.org/html5/spec/Overview.html#attr-fs-method
स्टीफन टिलकोव

3
उन्हें वापस पाने के लिए एक प्रारूप का प्रस्ताव किया गया है: amundsen.com/examples/put-delete-forms
जोस्ट बैज

26
मुर्गी? चिड़िया, पक्षी? मुझे लगता है कि आप चेक का मतलब है। यह एक अजीब स्वर स्वैप है।
JayC

52
नहीं, मेरा मतलब है चिकन, यह दिखाते हुए कि आप जो चाहें कर सकते हैं। हालांकि
ऐनी

6
.... रूप में मैं इस चिकन व्यवसाय के साथ था बस के रूप में उन लोगों के लिए व्यग्र w3c-test.org/XMLHttpRequest/open-method-case-sensitive.htm
n0nag0n

43

XMLHttpRequest जावास्क्रिप्ट ऑब्जेक्ट मॉडल में एक मानक वस्तु है।

विकिपीडिया के अनुसार, XMLHttpRequestपहले Internet Explorer 5 में एक ActiveX ऑब्जेक्ट के रूप में दिखाई दिया था, लेकिन तब से इसे एक मानक के रूप में बनाया गया है और 1.0, Apple Safari 1.2, Opera 7.60-p1 और IE 7.0 के बाद से मोज़िला परिवार में जावास्क्रिप्ट में उपयोग के लिए शामिल किया गया है। ।

open()विधि वस्तु पर एक तर्क के रूप HTTP पद्धति लेता है - और किसी भी मान्य HTTP विधि (लिंक के आइटम नंबर 5 देखें) लेने के रूप में निर्दिष्ट किया जाता है - सहित GET, POST, HEAD, PUTऔर DELETE, के रूप में RFC 2616 द्वारा निर्दिष्ट

एक साइड नोट के रूप में IE 7–8 केवल निम्नलिखित HTTP विधियों को अनुमति देता है: "GET", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPFATCH", "MKCOL" , "COPY", "LOCK", "UNLOCK", और "विकल्प"


7
मैं आगे पढ़ने के लिए प्रलेखन के कुछ टुकड़ों को देखने की उम्मीद करता हूं, मैं नहीं कहता कि मैं आपको विश्वास नहीं करता। विकिपीडिया पर लिंक वास्तव में काफी अच्छे हैं। धन्यवाद
naugtur

19

_method छिपी हुई फ़ील्ड वर्कअराउंड

रेल में इस्तेमाल किया और किसी भी ढांचे के लिए अनुकूलित किया जा सकता है:

  • _methodकिसी भी रूप में छिपा हुआ पैरामीटर जोड़ें जो GET या POST नहीं है:

    <input type="hidden" name="_method" value="DELETE">

    यह HTML निर्माण सहायक विधि (जैसे रेल form_tag) के माध्यम से चौखटे में स्वचालित रूप से किया जा सकता है

  • POST को वास्तविक रूप विधि तय करें ( <form method="post")

  • _methodसर्वर पर प्रक्रियाएं और ठीक वैसा ही करें जैसे कि वास्तविक POST के बजाय उस विधि को भेजा गया था

राशनेल / इतिहास यह क्यों संभव नहीं है: /software/114156/why-there-are-no-put-and-delete-methods-in-html-forms


Santilli, हाय यार यह एक लंबे समय के बाद से आप इस समाधान की पेशकश की है, और जब से मैं वेब विकास में एक शुरुआत कर रहा हूँ मैं एक सवाल है जो मुझे आशा है कि आप जवाब देंगे। तो, आपने कहा कि "सर्वर पर _method को संसाधित करता है और ठीक उसी तरह करता है जैसे कि वास्तविक POST के बजाय उस विधि को भेजा गया था" आपका मतलब था कि अगर PUT (या DELETE) के साथ छिपी हुई विधि को दृश्य में रखा गया है, तो इसका वास्तव में मतलब होगा (या DELETE) अनुरोध सही है? यदि हाँ, तो भिखारी पर POST विधि का उपयोग क्यों करें और फिर छिपे हुए PUT या DELETE का उपयोग करें। POST और PUT (या DELETE) के बीच क्या संबंध है :)
Mirich

1
@ मिरिक केवल POST का समर्थन करता है। इसलिए हम अतिरिक्त डेटा के साथ POST भेजते हैं, जो सर्वर को पता है कि इसका मतलब है: आह, मुझे इस तरह से व्यवहार करना चाहिए।
सिरो शांतिली 17 iro iro 事件 法轮功 '

आपका ध्यान और उत्तर देने के लिए Ciro का धन्यवाद, इसलिए क्या मैं इस परिदृश्य पर विचार कर सकता हूं: POST एक सार्वभौमिक चीज है जो वास्तविक POST, PUT, PATCH और DELETE को अपने अंदर रखती है और यदि आप शुरुआत में बिना छिपाए POST का उपयोग करते हैं तो इसका वास्तविक अर्थ होगा पद। लेकिन अगर आप छिपे हुए (PUT या DELETE) के साथ POST का उपयोग करते हैं तो आप सर्वर को बताएं कि आप PUT या DELETE का उपयोग करना चाहते हैं जो कि POST के अंदर हैं क्योंकि इसके बच्चे मेरे अंदर एक अजीब सा उपमा जानते हैं लेकिन क्या यह सही है? :)
मिरिक

1
@ मिरिक यूप, मुझे लगता है कि आपने विचार प्राप्त कर लिया है।
Ciro Santilli 郝海东 冠状 iro i 法轮功 '

खेद है कि सिर्फ़ आखिरी बात, मुझे आश्चर्य है कि HTML5 से PUT और DELETE को क्यों हटाया गया क्योंकि यह बेहतर नहीं होगा यदि आप फॉर्म टैग की शुरुआत में PUT या DELETE का उपयोग कर सकते थे और केवल छिपे हुए का उपयोग नहीं कर सकते थे। कृपया आप शीघ्र और स्पष्ट रूप से बता सकते हैं कि PUT और DELETE को हटाने का वास्तविक कारण क्या था। अग्रिम धन्यवाद :)
मिरिक

15

मेरा मानना ​​है कि उन टिप्पणियों में विशेष रूप से ब्राउज़रों को संदर्भित किया जाता है, अर्थात लिंक पर क्लिक करना और फ़ॉर्म सबमिट करना, नहीं XMLHttpRequestXMLHttpRequestकेवल एक कस्टम क्लाइंट है जो आपने जावास्क्रिप्ट में लिखा था जो ब्राउज़र को रनटाइम के रूप में उपयोग करता है।

अद्यतन: स्पष्ट करने के लिए, मेरा मतलब यह नहीं था (हालांकि मैंने लिखा था) जो आपने लिखा था XMLHttpRequest; मेरा मतलब था कि आपने कोड का उपयोग किया है XMLHttpRequest। ब्राउज़र मूल रूप से समर्थन नहीं करते हैं XMLHttpRequestXMLHttpRequestजावास्क्रिप्ट रनटाइम से आता है, जिसे एक ब्राउज़र द्वारा होस्ट किया जा सकता है, हालांकि यह होना आवश्यक नहीं है ( राइनो देखें )। इसीलिए लोग कहते हैं कि ब्राउज़र समर्थन नहीं करते हैं PUTऔर DELETEवास्तव में यह जावास्क्रिप्ट है जो उनका समर्थन कर रहा है।


XMLHttpRequest जावास्क्रिप्ट ऑब्जेक्ट मॉडल में एक मानक वस्तु है।
याकूब क्राल

9
@ जैकोब ट्रू, लेकिन अलग-अलग ब्राउज़रों के अलग-अलग जावास्क्रिप्ट इंजन होते हैं। यह जानना कि PUT का समर्थन करने वाले लोग अभी भी सहायक हैं।
सेन्फो

1
it's actually JavaScript that is supporting them। वास्तव में सच नहीं है। XMLHttpRequestएक 'होस्ट-ऑब्जेक्ट' है, जिसका अर्थ है कि यह एक ऐसी वस्तु है जो होस्ट से जावास्क्रिप्ट कोड में कार्यक्षमता को उजागर करती है। यह स्वयं जेएस का हिस्सा नहीं है।
स्टिजन डे विट

9

हाँसभी आधुनिक ब्राउज़रों में , PUT, DELETE, HEAD आदि HTTP तरीके उपलब्ध हैं।

XMLHttpRequest Level 2 ब्राउज़र का अनुपालन करने के लिए इन विधियों का समर्थन करना चाहिए । यह जांचने के लिए कि कौन से ब्राउज़र XMLHttpRequest Level 2 का समर्थन करते हैं, मैं CanIUse की सलाह देता हूं:

http://caniuse.com/#feat=xhr2

केवल Opera Mini में atm (juli '15) के समर्थन की कमी है, लेकिन Opera Mini में हर चीज के लिए समर्थन का अभाव है। :)


7

बस जोड़ने के लिए - सफारी 2 और पहले निश्चित रूप से PUT और DELETE का समर्थन नहीं किया था। मुझे यह आभास हो गया कि 3 ने काम किया है, लेकिन मेरे पास अब और परीक्षण करने के लिए नहीं है। Safari 4 निश्चित रूप से PUT और DELETE का समर्थन करता है।


5
क्या कोई पुष्टि कर सकता है कि PUT और DELETE के लिए सफारी के किस संस्करण को समर्थन मिला?
एमजे

1
क्या कोई विस्तृत रूप से बता सकता है कि सभी ब्राउज़र अब PUT & DELETE का समर्थन करते हैं - और मोटे तौर पर यह कब तक उपलब्ध है। "CHICKEN" उदाहरण पर ध्यान देने का अर्थ यह है कि इसका पूरी तरह से सर्वर पर निर्भर करता है कि कौन सी विधि का उपयोग किया जाता है और यह कि जावास्क्रिप्ट विधि के प्रकार को प्रतिबंधित नहीं करता है ...?
कोडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.