2015-07-24 14 views
9

सफल नहीं हुआ है। मैं अपने एपीआई के रूप में PHP रीस्ट फ्रेमवर्क के साथ एम्बर ऐप बनाने की कोशिश कर रहा हूं। एम्बर ऐप http://localhost:4200 पर परोसा जा रहा है और एपीआई को केवल http://localhost से परोसा जा रहा है। यह एक सीओआरएस मुद्दा पैदा कर रहा है। मैंने सब कुछ करने की कोशिश की है जिसे मैं सोच सकता हूं, लेकिन मुझे यह कहते हुए एक त्रुटि मिल रही है कि अनुरोध अवरुद्ध था और प्रीफलाइट चैनल सफल नहीं हुआ था। यह फ़ायरफ़ॉक्स या क्रोम में सफल नहीं होता है।सीओआरएस प्रीफलाइट चैनल

Header set Access-Control-Allow-Methods "GET, POST, OPTIONS" 
Header set Access-Control-Allow-Origin "http://localhost:4200" 
Header set Access-Control-Allow-Credentials true 
Header set Access-Control-Allow-Headers "accept, content-type" 

यहाँ मेरी अनुरोध हेडर है:

Host: localhost 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Origin: http://localhost:4200 
Access-Control-Request-Method: POST 
Access-Control-Request-Headers: content-type 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 

और प्रतिक्रिया हेडर:

Access-Control-Allow-Credentials: true 
Access-Control-Allow-Headers: accept, content-type 
Access-Control-Allow-Methods: GET, POST, OPTIONS 
Access-Control-Allow-Origin: http://localhost:4200 
Connection: close 
Content-Type: text/html; charset=utf-8 
Date: Fri, 24 Jul 2015 17:10:49 GMT 
Server: Apache/2.4.9 (Win64) PHP/5.5.12 
Set-Cookie: 24fd751c8630b64fcf935a94e8bcef46=qih6pfnqo94d4cgi5b5d79h4i6; path=/ 
Transfer-Encoding: chunked 
X-Powered-By: PHP/5.5.12 
p3p: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM" 

किसी भी

मैं अपने एपीआई के लिए .htaccess फ़ाइल में निम्न जोड़ दिया है विचार या समाधान? किसी भी मदद की सराहना की है। धन्यवाद!

उत्तर

1

this answer राज्यों के रूप में, पूर्व-उड़ान विकल्प अनुरोधों का उचित संचालन आवश्यक है, लेकिन काम करने के लिए क्रॉस-साइट संसाधन अनुरोधों के लिए सहायक नहीं है। प्रीफ्लिग के बाद किसी भी बाद के अनुरोधों के सभी प्रतिक्रियाओं में एक्सेस-कंट्रोल-स्वीकृति-हेडर शामिल होना चाहिए। उम्मीद है की यह मदद करेगा।

+0

धन्यवाद, लेकिन मैं किसी भी कस्टम हेडर की जरूरत नहीं है और यह भी कि बात करने के लिए नहीं मिलता है। – NicholasJohn16

+0

चूंकि आप कोई कस्टम हेडर सेट नहीं करते हैं, इसलिए आप अपने अनुरोध में एक्सेस-कंट्रोल-अनुमति-हेडर क्यों सेट करते हैं? मुझे सामग्री-प्रकार हेडर सेट नहीं दिखाई देता है, इसलिए ऐसा लगता है कि यह अनावश्यक है। – Buyuk

+0

यह है। यह सिर्फ काम करने का प्रयास था। जहां तक ​​मैं समझता हूं, यह वास्तव में जरूरी नहीं होना चाहिए। – NicholasJohn16

2

एक संभावित समस्या यह हो सकती है कि ब्राउजर ब्राउज़र के विकल्प अनुरोध के लिए सर्वर प्रतिक्रिया को कैश नहीं कर रहा है। इसे ठीक करने के लिए, अपनी प्रतिक्रिया में "एक्सेस-कंट्रोल-मैक्स-एज" हेडर और इसे '86400' (1 दिन) जैसे कुछ सेट करने का प्रयास करें। सीओआरएस पर MDN's दस्तावेज के अनुसार, एक और मुद्दा यह हो सकता है कि चूंकि आप एक विशिष्ट उत्पत्ति निर्दिष्ट कर रहे हैं और न केवल मूल के लिए वाइल्डकार्ड प्रतिक्रिया का उपयोग कर रहे हैं, इसलिए आपको सर्वर से प्रतिक्रिया निर्दिष्ट करने के लिए अपनी प्रतिक्रिया में "भिन्न" शीर्षलेख शामिल करना होगा अनुरोध की उत्पत्ति पर निर्भर करेगा। यह बहुत तरह के जवाब में किया जा सकता है:

Vary: Origin 

आप एक सफल विकल्प अनुरोध के बाद अपने मुख्य अनुरोध के साथ एक CORS त्रुटि मिलती है, मेरा मानना ​​है कि आप भी "पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति" शामिल करने की ज़रूरत हेडर और "वरी" हेडर भी उस प्रतिक्रिया में।

आशा है कि इससे मदद मिलती है!

+0

हाय। मैं Woocommerce एपीआई के साथ बातचीत करने के लिए AngularJS का उपयोग कर रहा हूँ। मैं डेटा प्राप्त कर सकता हूं, लेकिन जब मैं एक पोस्ट करने का प्रयास करता हूं, तो मुझे त्रुटि मिलती है 'प्रीफलाइट के लिए प्रतिक्रिया अवैध HTTP स्थिति कोड 401' है। किसी भी सहायताको बहुत सराहा जाएगा। –

4

क्या आप अपना प्रीफलाइट OPTIONS अनुरोध 200 लौटने का अनुरोध कर रहे हैं? आप कोशिश कर सकते हैं और इस तरह से अपनी .htaccess के साथ एक 200 प्रतिक्रिया वापस:

Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS" 
Header always set Access-Control-Allow-Origin "http://localhost:4200" 
Header always set Access-Control-Allow-Credentials true 
Header always set Access-Control-Allow-Headers "accept, content-type" 

RewriteEngine On 
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L] 
+0

नहीं, यह सीओआरएस मुद्दे के कारण 500 लौट रहा है। मैंने जेएस कोड का पालन किया और इसे सभी एक ही डोमेन में ले जाया और यह पूरी तरह से काम करता है। एकमात्र मुद्दा कोर है। – NicholasJohn16

1

सर्वर साइड सर्वलेट हेडर जोड़ सकते हैं और 200 स्थिति लौटने। शोकहारा WCF सेवा, जहां निम्न कोड Global.asax में जोड़ा गया से उदाहरण फ़ाइल

protected void Application_AuthenticateRequest(object sender, EventArgs e){ 
    Response.AddHeader("Access-Control-Allow-Origin", "*"); 
    if (Context.Request.HttpMethod.Equals("OPTIONS")) { 
     Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); 
     Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
     Response.StatusCode = (int)System.Net.HttpStatusCode.OK; 
     Context.ApplicationInstance.CompleteRequest(); 
    } 
} 
संबंधित मुद्दे