2012-08-13 13 views
53

HTTP OPTIONS विधि का उपयोग यह निर्धारित करने के लिए किया जाता है कि सर्वर किसी दिए गए संसाधन पर अन्य तरीकों का समर्थन करता है। यह देखते हुए कि, मेरे पास दो प्रश्न हैं:HTTP विकल्प अनुरोध का जवाब कैसे दें?

  • यह प्रतिक्रिया कैसी दिखती है? मैंने Public, Allow, और यहां तक ​​कि Access-Control-Allow-Methods हेडर में CSV सूचियों के साथ उदाहरण देखे हैं। क्या उन्हें सभी की जरूरत है? क्या फर्क पड़ता है? RFC 2616 यहां बहुत उपयोगी नहीं लगता है।

  • क्या यह गैर-आरईएसटी-एपीआई वातावरण में संसाधनों का समर्थन करने वाले कार्यों की सूची के लिए इसका उपयोग करना उचित होगा? उदाहरण के लिए, मेरी ConversionController कार्रवाई convert, का समर्थन करता है, तो होगा इस मेकअप भावना की तरह एक प्रतिक्रिया:

अनुरोध:

OPTIONS /conversion HTTP/1.1 

प्रतिक्रिया:

HTTP/1.1 200 OK 
... 
Allow: CONVERT 
... 
+0

'अनुमति दें: कनवर्टर' ?? – Pacerier

उत्तर

13

RFC 2616 को परिभाषित करता है "अनुमति दें" (http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.14.7)। "सार्वजनिक" अब उपयोग में नहीं है। "एक्सेस-कंट्रोल-स्वीट-मेथड" को सीओआरएस विनिर्देश में परिभाषित किया गया है (http://www.w3.org/TR/cors/ देखें)।

+0

स्पष्टीकरण के लिए धन्यवाद। सीओआरएस के मामले में, क्या 'अनुमति' और 'पहुंच-नियंत्रण-अनुमति-विधियों' दोनों को भेजा जाना चाहिए, या केवल बाद वाले? – FtDRbwLXw6

+0

मैं हमेशा "अनुमति दें" वापस आऊंगा, इस प्रकार विशेष मामले के कोर नहीं। –

+3

सामग्री के बारे में क्या? क्या शरीर की सामग्री उपलब्ध हो सकती है? – CMCDragonkai

5

शीर्षक के जवाब में: "HTTP विकल्प अनुरोध का जवाब कैसे दें?" इसका उत्तर देने के लिए, मैं जानना चाहता हूं कि आप एक विकल्प अनुरोध का जवाब क्यों देना चाहते हैं? आपको कौन सा विकल्प भेज रहा है, और क्यों? Many public servers respond with some form of "error" or "not allowed" (500, 501, 405)। इसलिए, जब तक कि आप एक विशिष्ट परिस्थिति में न हों, जहां आपके ग्राहक उचित रूप से विकल्प अनुरोध भेज रहे होंगे और उपयोगी/सार्थक जानकारी वापस उम्मीद करेंगे (उदाहरण के लिए, वेबडीवीवी, सीओआरएस), शायद आप इसके साथ जवाब देना चाहते हैं: "ऐसा मत करो।"

"विकल्प/रूपांतरण HTTP/1.1" अनुरोध के बारे में आपके प्रश्न के संदर्भ में: जब तक कि आप नहीं जानते कि आपके सर्वर का कुछ ग्राहक है, एक ग्राहक जो "रूपांतरण" के लिए एक विकल्प अनुरोध भेजता है और इसके साथ प्रतिक्रिया की अपेक्षा करता है "अनुमति दें: कन्वर्ट," जवाब नहीं है: ऐसा जवाब देने में कोई अर्थ नहीं होगा। मुझे लगता है कि अधिकांश कार्यान्वयन विकल्प विकल्प का समर्थन करते हैं और मानक HTTP विधियों के साथ "अनुमति दें" का जवाब देते हैं।

Here's a great article on the topic

सारांश: विकल्प तुरंत समस्याग्रस्त हैं क्योंकि यह कैशिंग का समर्थन नहीं करता है। विकल्प: सर्वर-व्यापी मेटाडाटा: well-known URI's आज़माएं। संसाधन-विशिष्ट: Link header का उपयोग अपने प्रतिक्रियाओं, या उस संसाधन के लिए प्रतिनिधित्व प्रारूप में एक लिंक का उपयोग करने का प्रयास करें।

आखिरकार, यदि आप एक सेवा विवरण के बाद हैं, तो WADL या RSDL पर एक नज़र डालें।

संपादित करें:

dotnetguy नीचे टिप्पणी में एक अच्छा बिंदु बनाता है: विकल्प कुछ संदर्भों (जैसे, CORS) में शक नहीं मूल्यवान है; मैं निश्चित रूप से अन्यथा सुझाव देने का मतलब नहीं था।

+3

आलेख अच्छा है, और प्राधिकरण द्वारा, लेकिन अनुभाग "HTTPbis में विकल्प क्यों छोड़ रहा है, फिर" और टिप्पणियां देखें। सीओआरएस के साथ, एक आरईएसटी सिस्टम विकल्प का जवाब देने में सक्षम होना चाहिए, खासकर अगर एपीआई जावास्क्रिप्ट आधारित वेब एप्लिकेशन से इस्तेमाल किया जा रहा है। जेएस ढांचे के लिए वास्तविक HTTP कॉल से पहले "प्रीफलाइट" विकल्प अनुरोध को आग लगाना आम बात है। – dotnetguy

+0

मैकोज़ फाइंडर ([वेबडैव का उपयोग करके] (http://www.webdav.org)) से अपने (स्वयं लिखित) http सर्वर को कनेक्ट करते समय मैंने OPTIONS अनुरोधों को देखा। – Joe

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