2016-06-06 9 views
13

में बिना कोई CORS पोस्ट लाने में ऐसे ही अनुरोध करने पर असमर्थ:हैडर

return fetch(
      'http://localhost:8000/login', 
      { method: 'POST', 
       headers: new Headers(
        {"Content-Type": "application/json", 
        "Accept":"application/json"} 
       ), 

       body: JSON.stringify(
        {'name': 'Tom', 'password': 'Soyer'} 
       ) 
      } 
      ).then(response => { console.log(response);}) 
      .catch(err => console.log(err)) 

अनुरोध पोस्ट बजाय विधि विकल्पों के साथ चल रहा है। 'कोई CORS के अनुरोध बन पोस्ट:: केवल मोड जोड़ने पर

return fetch(
      'http://localhost:8000/login', 
      { method: 'POST', 
       mode: 'no-cors', 
       headers: new Headers(
        {"Content-Type": "application/json", 
        "Accept":"application/json"} 
       ), 
       body: JSON.stringify(
        {'name': 'Tom', 'password': 'Soyer'} 
       ) 
      } 
      ).then(response => { console.log(response);}) 
      .catch(err => console.log(err)) 

लेकिन प्रतिक्रिया (नेटवर्क प्रतिसाद स्थिति है, भले ही 200) की तुलना में ठीक नहीं: {प्रकार: "अपारदर्शी", यूआरएल: "", स्थिति : 0, ठीक है: झूठे, statusText: "" ...} मैं इसे लगता है क्योंकि

Content-Type हैडर के लिए केवल अनुमति मान हैं: आवेदन/x-www फार्म-urlencoded बहुखण्डीय/फार्म डेटा टेक्स्ट/सादा

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

किसी भी तरह से लाने के साथ POST JSON डेटा लाने के लिए कोई तरीका है?

+3

ठीक है, बस एक) क्रॉस-डोमेन HTTP अनुरोध नहीं बनाते हैं या ख) उन्हें उचित CORS हेडर – Bergi

उत्तर

13

कस्टम Content-Type हैडर आप कारणों भेज रहे हैं आपके अनुरोध preflighted जा करने के लिए है, जो एक विकल्प अनुरोध का मतलब है, पोस्ट अनुरोध है कि भेज दिया के बारे में बारे में कुछ मेटाडेटा युक्त, वास्तविक पोस्ट अनुरोध से पहले भेजा जाएगा।

आपके सर्वर को इस विकल्प अनुरोध से निपटने के लिए तैयार होने की आवश्यकता है। आपने निर्दिष्ट किया है नहीं क्या सर्वर में लिखा है, लेकिन उदाहरण के लिए एक्सप्रेस के साथ, आप एक मिडलवेयर कि सभी 'विकल्प' अनुरोधों को बीच में रोक रजिस्टर कर सकते हैं, सेट Access-Control-Allow-Origin: * और Access-Control-Allow-Headers: Content-Type हेडर, और 200

के साथ प्रतिक्रिया अगर ऐसा है आपके लिए 'सामग्री-प्रकार': 'टेक्स्ट/सादा' शीर्षलेख का उपयोग करके अनुरोध करना संभव है, जो आपकी समस्या का समाधान करेगा। वैकल्पिक रूप से आप कुछ ऐसा उपयोग कर सकते हैं जो पूरी तरह से एक्सएचआर को बाईपास करता है, जैसे JSONP।

1

आप सर्वर पर कोई नियंत्रण नहीं है, तो आप इस कोशिश कर सकते हैं:

http://cors-anywhere.herokuapp.com/

+11

रूटिंग के साथ जवाब देने के अज्ञात रिवर्स प्रॉक्सी किसी के माध्यम से यातायात एक सुरक्षा और गोपनीयता परिप्रेक्ष्य से उपयुक्त समाधान की तरह प्रतीत नहीं होता है। – Marmelatze

+4

सुनिश्चित करें, लेकिन परीक्षण उद्देश्यों के लिए इसे त्वरित कार्य के रूप में माना जा सकता है- लगभग –

+0

@MarcinRapacz: यदि कुकीज़ मूल सर्वर के लिए शामिल होती है तो यह काम नहीं करेगा। – user2284570