2017-08-26 35 views
5

में एपीआई गेटवे के लिए सीओआरएस कॉन्फ़िगर करना मैंने here से उदाहरण का पालन किया जिसमें कॉरस + एसएएम की कॉन्फ़िगरेशन के लिए एक स्वैगर फ़ाइल शामिल है।एसएएम/क्लाउडफॉर्मेशन/स्वैगर

callback(null, { 
    statusCode: '200', 
    headers: { 
     'Access-Control-Allow-Origin': '*', 
     'Access-Control-Allow-Headers': 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token', 
     'Access-Control-Allow-Methods': 'OPTIONS,GET,POST,PUT,PATCH,DELETE' 
    }, 
    body: JSON.stringify({message: "Hello world"}) 
}); 

यह सही है: ऐसा लगता है कि मैं अभी भी CORS त्रुटि मिलती है जब तक कि मैं मैन्युअल रूप से प्रत्येक समारोह में CORS हेडर जोड़ने लगता है? या मुझ से कुछ गलत हो रहा है?

+0

बस पुष्टि करने के लिए, उपर्युक्त कोड आपके लिए काम करता है लेकिन आप यह पुष्टि करना चाहते हैं कि यह प्राप्त करने का यह सबसे अच्छा तरीका है? – mostafazh

उत्तर

3

सभी एडब्ल्यूएस डॉक्स आप हर एपीआई गेटवे संसाधन में उन 3 हेडर निर्दिष्ट और उन्हें हर कार्य प्रतिक्रिया है कि CORS का समर्थन करेंगे में वापस जाने के लिए की जरूरत है, जैसा कि आप देख सकते हैं कि वे 2 एपीआई गेटवे अंतिम बिंदु में परिभाषित करने के लिए उन 3 हेडर को जोड़ने के लिए किया था सुझाव है उदाहरण परियोजना की swagger.yaml फ़ाइल।

Github नमूना आप का उल्लेख उपयोग कर रहा है क्या API Gateway में एक proxy resource, कहा जाता है जो मूल रूप से एक API Gatewaty मार्ग कि api के लिए किए गए किसी भी अनुरोध से मेल और अनुरोध के पार्थ, विधि ... आदि के साथ प्रॉक्सी लैम्ब्डा समारोह को गति प्रदान करेगा आप here कैसे काम करते हैं इसके बारे में और जान सकते हैं।

क्या आप serverless जैसी कुछ कोशिश करने के लिए खुले हैं जो आपको अपने लैम्ब्डा कार्यों को बेहतर तरीके से व्यवस्थित करने में मदद कर सकता है जैसे सैम करता है। यह भी support CORS है।

0

आप CORS खुशी से काम करने के लिए दो आधारों को शामिल करने की जरूरत है (उदाहरण के लिए swaggerdoc/क्रोम के साथ)

हर पथ आप संभाल रहे हैं के लिए:

  1. एक विकल्प प्रतिक्रिया निर्दिष्ट करना जो तरीकों आप
  2. संभाल लो 'पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति' शीर्षक अपने वास्तविक पद्धति पर लौटे
  3. है कॉल

मैं वर्तमान में सबसे सरल समाधान मिल गया है होना करने के लिए: 1. विकल्प हिस्सा एपीआई द्वारा नियंत्रित करने के बाद गिनीकृमि नकली 2. हैडर एपीआई द्वारा गैर मज़ाक उड़ाया प्रतिक्रियाओं को जोड़ा गया गिनीकृमि

तो, आप के साथ प्राप्त और पोस्ट "/ फ्रेड" की राह समर्थन कर रहे हैं, तो:

 

     "/fred" { 
      "options": { 
      "consumes": [ 
       "application/json" 
      ], 
      "produces": [ 
       "application/json" 
      ], 
      "responses": { 
       "200": { 
       "description": "Success", 
       "schema": { 
        "$ref": "#/definitions/Empty" 
       }, 
       "headers": { 
        "Access-Control-Allow-Origin": { 
        "type": "string" 
        }, 
        "Access-Control-Allow-Methods": { 
        "type": "string" 
        }, 
        "Access-Control-Allow-Headers": { 
        "type": "string" 
        } 
       } 
       } 
      }, 
      "x-amazon-apigateway-integration": { 
       "responses": { 
       "default": { 
        "statusCode": "200", 
        "responseParameters": { 
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,OPTIONS'", 
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", 
        "method.response.header.Access-Control-Allow-Origin": "'*'" 
        } 
       } 
       }, 
       "requestTemplates": { 
       "application/json": "{\"statusCode\": 200}" 
       }, 
       "passthroughBehavior": "when_no_match", 
       "type": "mock" 
      } 
     } 

फिर अपने वास्तविक प्रोसेसर में, आप यह सुनिश्चित करने के लिए आप 'पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति' शीर्षक है

 

    "post": { 
     "responses": { 
       "200": { 
       "description": "Success", 
       "schema": { 
        "$ref": "#/definitions/myrecord" 
       }, 
       "headers": { 
        "Access-Control-Allow-Origin": { 
        "type": "string" 
        } 
       }, 
     ..... 


     "x-amazon-apigateway-integration": { 
     "default": { 
        "statusCode": "200", 
        "responseParameters": { 
        "method.response.header.Access-Control-Allow-Origin": "'*'" 
        }, 
        "responseTemplates": { 
        "application/json": " ......" 
        } 
       } 

     ..... 

ध्यान दें कि आप के रूप में अच्छी

त्रुटि प्रतिक्रियाओं आदि पर इस हेडर वापस जाने के लिए की जरूरत की जरूरत है
0

जब हम अनुमति-उत्पत्ति में * उपयोग कर रहे हैं तो हमें भी इसी तरह की समस्याएं थीं।

कोई एक्सेस-कंट्रोल-अनुमति-उत्पत्ति में वाइल्डकार्ड का उपयोग नहीं कर सकता है जब प्रमाण-पत्र ध्वज सत्य होता है।

बदलें

'Access-Control-Allow-Origin': '*', 
आपके अनुरोध यूआरएल आप से अनुरोध कर रहे हैं के साथ

,

'Access-Control-Allow-Origin': 'http://localhost:8000', 

या जो कुछ भी आपके url है।

आपको अपने रिटर्न हेडर में पोर्ट नंबर भी शामिल करने की आवश्यकता है।इसमें http या https भी शामिल है या नहीं।

यदि आप स्वचालित करना चाहते हैं, तो रेफरल यूआरएल प्राप्त करें जिसे आप श्वेतसूची में डाल सकते हैं और रेफरर के प्रोटोकॉल, होस्ट, पोर्ट भाग को पास कर सकते हैं।

उम्मीद है कि यह मदद करता है।

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

  • कोई संबंधित समस्या नहीं^_^