2017-09-03 27 views
12

सीओआरएस प्रीफलाइट (OPTIONS) अनुरोध प्राप्त होने पर एक अच्छी तरह से लिखित HTTP सर्वर वापस क्या स्थिति कोड होना चाहिए?सीओआरएस प्रीफलाइट अनुरोधों के लिए उचित स्थिति कोड क्या हैं?

200, 204 या कुछ और?

क्या मूल कोड (और संबंधित हेडर सेट किए जाएंगे) के मामले में स्थिति कोड अलग होना चाहिए या अनुमति नहीं दी जानी चाहिए (और सीओआरएस हेडर सेट नहीं होंगे या मूल से मेल नहीं खाएंगे)?

उत्तर

10

इसका सारांश है, बस 200 का उपयोग करें।

थोड़ा अधिक आम तौर पर: आपको केवल सीओआरएस प्रीफलाइट OPTIONS अनुरोध के लिए एक ही स्थिति कोड भेजना चाहिए कि आप किसी अन्य OPTIONS अनुरोध के लिए वापस भेज देंगे। प्रासंगिक चश्मा की आवश्यकता नहीं है या उससे भी ज्यादा कुछ भी सिफारिश नहीं है।

जहाँ तक प्रासंगिक चश्मा: https://fetch.spec.whatwg.org/ पर लायें कल्पना जहां CORS प्रोटोकॉल के लिए आवश्यकताओं को परिभाषित कर रहे हैं, और यह कहते स्थिति रेंज 200 में anyhing हो सकता है - 299

CORS-preflight fetch algorithm, जो a step saying it can be any “ok status" है से है कि:

स्थिति अनुरोध और प्रतिक्रिया रिटर्न सफलता और प्रतिक्रिया के लिए की एक CORS जांच
एक ok status है, तो ये substeps चलाएँ: ...

और जहां तक ​​"ठीक स्थिति" है, तो स्पेक यह कहता है:

एक ठीक स्थिति रेंज 200 को 299, समावेशी में किसी भी स्थिति है। 299 -

इसके अलावा, हालांकि, कल्पना लायें 200 भीतर किसी विशेष स्थिति की सिफारिश नहीं करता।

अन्य प्रासंगिक नमूना HTTP 1.1 spec है, जिसमें सभी HTTP प्रतिक्रिया स्थिति कोडों के अर्थशास्त्र परिभाषित करने वाला एक अनुभाग है, और उसके भीतर, a specific section that defines Successful 2xx कोड।

और उस अनुभाग के भीतर वहाँ , जो कहते हैं यह है:

The 200 (OK) status code indicates that the request has succeeded. 
The payload sent in a 200 response depends on the request method. 
For the methods defined by this specification, the intended meaning 
of the payload can be summarized as: 
… 
OPTIONS a representation of the communications options; 

तो एक CORS preflight विकल्प के लिए एक प्रतिक्रिया बस होने की जरूरत है:

  • एक संकेत है कि अनुरोध सफल रहा
  • संचार विकल्पों का एक प्रतिनिधित्व (जिसमें इस मामले में Access-Control-Allow-Methods और Access-Control-Allow-Headers प्रतिक्रिया शीर्षलेख शामिल हैं)

यही है कि 200 OK को HTTP स्पेक द्वारा परिभाषित किया गया है, ताकि आप वहां पर रुक सकें।

लेकिन यदि आप the rest of the 2xx codes in that section के माध्यम से पढ़ते हैं, तो आप को छोड़कर OPTIONS प्रतिक्रिया के लिए उनमें से कोई भी अर्थशास्त्र की पुष्टि कर सकते हैं।

अब जहाँ तक 204 No Content चला जाता है के रूप में, वहाँ कुछ भी नहीं गलतOPTIONS के लिए उपयोग करने के साथ है प्रतिक्रियाओं-लेकिन जहां तक ​​मैं देख सकता हूँ, वहाँ भी नहीं वास्तव में किसी भी सवाल है। ऐसा इसलिए है क्योंकि है:

  • कुछ अन्य तरीकों के लिए विपरीत, HTTP कल्पना कोई फायदा नहीं एक OPTIONS पेलोड के लिए
  • इसलिए व्यवहार में परिभाषित करता है, ग्राहकों को किसी भी पेलोड (सामग्री) एक OPTIONS के लिए वापस आने के लिए की उम्मीद नहीं है (और किसी भी पेलोड कि वापस आया था साथ कुछ भी नहीं होता)

... इसलिए जहाँ तक मैं देख सकता हूँ वहाँ एक OPTIONS जवाब में एक विशिष्ट 204 स्थिति कोड का उपयोग कर स्पष्ट रूप से ग्राहकों को कोई पेलोड है बताने के लिए कोई व्यावहारिक उद्देश्य है।

यह संभव है कि मैं गलत हो सकता हूं, हालांकि, और मुझे कुछ याद आ रही है। लेकिन मुझे ऐसा नहीं लगता है।

क्या मूल स्थिति (और संबंधित शीर्षलेख सेट किए जाएंगे) के मामले में स्थिति कोड अलग होना चाहिए या अनुमति नहीं दी जानी चाहिए (और सीओआरएस हेडर सेट नहीं होंगे या मूल से मेल नहीं खाएंगे)?

नहीं, मुझे नहीं लगता कि यह अलग होना चाहिए। मुझे नहीं पता कि 200 याके अलावा मानक-परिभाषित कोड क्या है, आप किसी भी तरह से उपयोग कर सकते हैं-लेकिन इसके बावजूद, चश्मा को यह अलग होने की आवश्यकता नहीं होती है और यदि यह है तो किसी भी अलग उपयोग को परिभाषित नहीं करते हैं। और इसके बारे में सोचें: उन दो मामलों के लिए स्टेटस कोड में किसी भी अंतर के कारण कोई भी मौजूदा क्लाइंट कोड क्या अलग-अलग करने वाला है?

यदि उस प्रश्न का उत्तर "कुछ भी नहीं" है, जहां तक ​​मैं देख सकता हूं कि इसे अलग करने में कोई बात नहीं है।


को देखते हुए सब से ऊपर, नीचे की रेखा है: बस CORS preflight OPTIONS प्रतिक्रिया के लिए 200 OK भेजें। 200 OK के अलावा किसी भी कोड को भेजना आवश्यक या उपयोगी नहीं है।

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