में CORS के साथ एकाधिक शीर्षलेखों को अनुमति दें I CORS अनुरोध स्वीकार करने के लिए मेरा Suave API प्राप्त करने का प्रयास कर रहा हूं।Suave
http://www.fssnip.net/mL/title/CORS-response-with-Suave
कौन सा मैं यहाँ पुन: होगा:: मैं इस स्निपेट यहां का पालन किया है
let setCORSHeaders =
setHeader "Access-Control-Allow-Origin" "*"
>=> setHeader "Access-Control-Allow-Headers" "content-type"
let allow_cors : WebPart =
choose [
OPTIONS >=>
fun context ->
context |> (
setCORSHeaders
>=> OK "CORS approved")
]
let webSite =
choose [
allow_cors
GET >=> OK "URLs are for wimps. GETting something? This is what you get."
]
लेकिन अब मैं अंतिमबिंदुओं कि एक टोकन में पारित करने की आवश्यकता होती है, और उन लोगों के अंतिम बिंदु त्रुटियों दे रहे हैं सीओआरएस में अनुपस्थित हेडर की वजह से। मेरा टोकन हेडर बस "टोकन" है, इसलिए मैंने दो चीजों की कोशिश की है, और दोनों ने इस मुद्दे को हल नहीं किया है।
प्रयास # 1
setHeader "Access-Control-Allow-Origin" "*"
>=> setHeader "Access-Control-Allow-Headers" "content-type"
>=> setHeader "Access-Control-Allow-Headers" "token"
यह लौटे एक त्रुटि कह content-type
नहीं रह स्वीकार कर लिया गया है - यह सूचित करते हैं कि पिछले setHeader
पहले एक है, जो जब आप यहाँ स्रोत कोड देखें अधिलेखित कर दिया लगता है: https://github.com/SuaveIO/suave/blob/master/src/Suave.Tests/HttpWriters.fs , लाइन 113 पर, एक परीक्षण है कि मेरे लिए यह वांछित व्यवहार का तात्पर्य है।
प्रयास # 2
इस प्रश्न पर प्रतिक्रिया के आधार पर: How to set a Json response in suave webpart, मैं एक अल्पविराम द्वारा पृथक सूची के माध्यम से दोनों हेडर सेट करने का प्रयास किया:
setHeader "Access-Control-Allow-Origin" "*"
>=> setHeader "Access-Control-Allow-Headers" "Content-Type,token"
लेकिन यह तो यह दर्शाता है एक त्रुटि दे दी है कि सीओआरएस पूरी तरह विफल रहा था:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access. The response had HTTP status code 401.
इसके अलावा, इस प्रश्न पर आधारित, मैंने एफ की कोशिश की ollowing:
setHeader "Access-Control-Allow-Origin" "*"
>=> setHeader "Access-Control-Allow-Headers:content-type" "Accept"
>=> setHeader "Access-Control-Allow-Headers:token" "Accept"
कौन इस प्रतिक्रिया दी: Request header field token is not allowed by Access-Control-Allow-Headers in preflight response.
तो, मैं कैसे शिष्ट में एक CORS अनुरोध में हेडर की किसी भी राशि के लिए अनुमति देते हैं?
संपादित
प्रयास # 3
मैं addHeader
बजाय setHeader
प्रयोग किया है:
let setCORSHeaders =
setHeader "Access-Control-Allow-Origin" "*"
>=> addHeader "Access-Control-Allow-Headers" "content-type"
>=> addHeader "Access-Control-Allow-Headers" "token"
कौन सा अब कह रहा है ... No 'Access-Control-Allow-Origin' header is present on the requested resource.
तो मुझे लगता है कि बदलने पहले setHeader
से addHeader
, मुझे अभी भी वही प्रतिक्रिया मिलती है।
फिक्स
addHeader "Access-Control-Allow-Origin" "*"
>=> setHeader "Access-Control-Allow-Headers" "token"
>=> addHeader "Access-Control-Allow-Headers" "content-type"
>=> addHeader "Access-Control-Allow-Methods" "GET,POST,PUT"
काम किया - इस के बाद, वहाँ क्या भेजा जा रहा था के साथ मुद्दों है, लेकिन CORS के साथ ही ज्यादा कुछ नहीं थे।
यह सही समझ में आया और इसे लागू करना आसान था, इसलिए स्वाभाविक रूप से यह अभी भी टूटा हुआ है :(कृपया ऊपर अपना संपादन देखें। – Max
https://www.html5rocks.com/en/tutorials/cors/ कहता है कि 'एक्सेस-कंट्रोल -उलो-विधि 'भी आवश्यक है; क्या आप इसे कहीं भी सेट कर रहे हैं? यदि नहीं, तो यह हो सकता है कि वास्तविक समस्या अनुपलब्ध' एक्सेस-कंट्रोल-स्वीकृति-विधि 'शीर्षलेख है, और त्रुटि संदेश भ्रामक है। लेकिन मैं हूं केवल इस बिंदु पर अनुमान लगाया। मैं कहूंगा कि https://www.html5rocks.com/en/tutorials/cors/ पढ़ें और विभिन्न शीर्षलेख संयोजनों के साथ प्रयोग करते रहें जब तक कि आपको CORS शीर्षलेखों का सही सेट न मिल जाए। क्षमा करें मैं नहीं हो सकता इससे अधिक मदद की। – rmunn
यह मुझे सही दिशा में ले जाता है - और यह पता चला है कि एक संपूर्ण 'Suave.CORS' नामस्थान है जो मैं पूरे समय इस्तेमाल कर सकता था, जो स्वाभाविक रूप से मुझे तब तक नहीं मिला जब तक कि मैंने इससे पहले काम नहीं किया मुद्दा – Max