2012-12-01 11 views
6

के साथ सीओआरएस त्रुटियां मेरे पास फ्लास्क, फ्लास्क-स्क्लाक्लेमी और फ्लास्क-रेस्टलेस का उपयोग करके एक एपीआई चल रहा है, और जावास्क्रिप्ट (backbone.js, सटीक होने के लिए) से POST/PUT/DELETE अनुरोध करने का प्रयास कर रहा हूं। हालांकि, मैं सीओआरएस त्रुटियों में चल रहा हूं - जीईटी को छोड़कर सब कुछ एक HTTP विकल्प 501 ब्राउज़र में कार्यान्वित त्रुटि नहीं देता है।फ्लास्क और गीवेंट

प्रारंभ में, मैं जोड़ने से सभी प्रतिक्रियाओं के लिए कम से कम प्रतिबंधक CORS संभव हेडर की कोशिश की:

@app.after_request 
def after(response): 
    response.headers.add('Access-Control-Allow-Origin', '*') 
    response.headers.add('Access-Control-Allow-Methods', 
         'POST, GET, PUT, PATCH, DELETE, OPTIONS') 
    response.headers.add('Access-Control-Allow-Headers', 
         'Content-Type, X-Requested-With') 
    response.headers.add('Access-Control-Max-Age', '1728000') 

    return response 

CORS विफल जब अनुरोध के Content-Type हैडर आवेदन/json के लिए स्थापित किया गया था (के रूप में एपीआई के लिए आवश्यक) लग रहा था

@app.before_request 
def before(): 
    request.environ['CONTENT_TYPE'] = 'application/json' 

हालांकि, पोस्ट के अलावा सब कुछ अभी भी विफल: है, तो एक त्वरित हैक चीजें काम कर पाने के लिए बनाया गया था। इसके अलावा, gevent की लॉगिंग चालू है, लेकिन कोई विकल्प अनुरोध कभी लॉग इन कर रहे हैं (जो मेरा मानना ​​है कि CORS preflight सामान है), तब भी जब ब्राउज़र उन्हें एक 501.

साथ नाकाम रहने से पता चलता मैं gevent में कुछ बदलने की जरूरत है या क्या सीओआरएस काम करने के लिए फ्लास्क?

संपादित करें: का उपयोग कर निर्मित बोतल सर्वर काम करता है, इसलिए gevent समस्या यहाँ है, लेकिन मैं डॉक्स के रास्ते में बहुत खोजने के लिए प्रतीत नहीं कर सकते हैं ...

उत्तर

7

है एपीआई चल रहा है एक फ्लास्क स्निपेट Decorator for the HTTP Access Control, आप @crossdomain (मूल = '*') सजावटी का उपयोग कर सकते हैं।

0

सबसे आसान तरीका कुप्पी के CORS प्लगइन का उपयोग करने के लिए है

नमूना कोड

app = Flask(__name__) 
cors = CORS(app, resources={r"/api/*": {"origins": "*"}}) 

@app.route("/api/v1/users") 
def list_users(): 
    return "user example" 

पिप

पिप यू कुप्पी के CORS स्थापित का उपयोग कर स्थापित करें प्रलेखन के लिए सिर पर यहां flask-cors documentation