Bird
Raised Fist0
Flaskframework~8 mins

CORS configuration with Flask-CORS - Performance & Optimization

Choose your learning style10 modes available
Performance: CORS configuration with Flask-CORS
MEDIUM IMPACT
This affects how browsers handle cross-origin requests, impacting page load speed and interaction responsiveness when fetching resources from different domains.
Allowing cross-origin requests in a Flask API
Flask
from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app, resources={r"/data": {"origins": ["https://example.com"]}})

@app.route('/data')
def data():
    return {'key': 'value'}
Restricting origins reduces preflight requests and allows browsers to skip OPTIONS calls, improving response time.
📈 Performance GainEliminates unnecessary preflights, reducing latency by 100-200ms per request
Allowing cross-origin requests in a Flask API
Flask
from flask import Flask
from flask_cors import CORS

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

@app.route('/data')
def data():
    return {'key': 'value'}
Allowing all origins with '*' causes browsers to send preflight OPTIONS requests for many calls, increasing latency and blocking rendering.
📉 Performance CostTriggers extra preflight requests, adding 100-200ms delay per cross-origin call
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Allow all origins with '*'No direct DOM impactNo reflowsNo paint cost[!] OK but causes network delays
Restrict origins to specific domainsNo direct DOM impactNo reflowsNo paint cost[OK] Best for network performance
Rendering Pipeline
CORS configuration affects the network request phase before rendering. Improper setup causes browsers to send preflight OPTIONS requests, delaying the main resource fetch and blocking rendering and interaction.
→Network Request
→Rendering Blocking
→Interaction Responsiveness
⚠️ BottleneckNetwork Request due to preflight OPTIONS calls
Core Web Vital Affected
INP
This affects how browsers handle cross-origin requests, impacting page load speed and interaction responsiveness when fetching resources from different domains.
Optimization Tips
1Avoid using '*' for allowed origins to reduce preflight requests.
2Specify only necessary HTTP methods and headers in CORS config.
3Use browser DevTools Network tab to monitor preflight OPTIONS calls.
Performance Quiz - 3 Questions
Test your performance knowledge
What causes browsers to send a preflight OPTIONS request when using CORS?
ARequesting simple GET requests only
BUsing wildcard '*' for allowed origins
CUsing same-origin requests
DServing static files
DevTools: Network
How to check: Open DevTools > Network tab, filter by OPTIONS requests, and observe if preflight requests occur before your API calls.
What to look for: Presence of OPTIONS requests indicates preflight; fewer or no OPTIONS requests means better CORS setup and faster response

Practice

(1/5)
1. What is the main purpose of using Flask-CORS in a Flask application?
easy
A. To allow or restrict cross-origin requests to the Flask app
B. To speed up the Flask app by caching responses
C. To handle database connections automatically
D. To manage user authentication and sessions

Solution

  1. Step 1: Understand what CORS means

    CORS stands for Cross-Origin Resource Sharing, which controls which websites can access resources from your Flask app.
  2. Step 2: Identify Flask-CORS role

    Flask-CORS is a tool to add headers that allow or restrict these cross-origin requests easily.
  3. Final Answer:

    To allow or restrict cross-origin requests to the Flask app -> Option A
  4. Quick Check:

    CORS controls access = A [OK]
Hint: Remember CORS controls cross-site access permissions [OK]
Common Mistakes:
  • Confusing CORS with caching or authentication
  • Thinking Flask-CORS speeds up the app
  • Assuming Flask-CORS manages databases
2. Which of the following is the correct way to enable CORS for all routes in a Flask app using Flask-CORS?
easy
A. from flask_cors import CORS app = Flask(__name__) CORS()
B. from flask_cors import CORS app = Flask(__name__) app.enable_cors()
C. from flask_cors import CORS app = Flask(__name__) CORS(app)
D. from flask_cors import CORS app = Flask(__name__) CORS(app, origins='none')

Solution

  1. Step 1: Import and create Flask app

    Import CORS from flask_cors and create the Flask app instance.
  2. Step 2: Enable CORS on the app

    Call CORS(app) to enable CORS for all routes. This is the correct syntax.
  3. Final Answer:

    from flask_cors import CORS\napp = Flask(__name__)\nCORS(app) -> Option C
  4. Quick Check:

    Enable CORS by passing app to CORS() [OK]
Hint: Use CORS(app) to enable CORS globally [OK]
Common Mistakes:
  • Calling CORS() without app argument
  • Using non-existent app.enable_cors() method
  • Setting origins='none' disables all CORS
3. Given this Flask app code snippet, what will be the CORS behavior for the route /data?
from flask import Flask, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app, origins=['https://example.com'])

@app.route('/data')
def data():
    return jsonify({'key': 'value'})
medium
A. Only localhost can access /data cross-origin
B. All origins can access /data without restriction
C. No origins can access /data due to missing CORS headers
D. Only requests from https://example.com will be allowed cross-origin access

Solution

  1. Step 1: Check CORS configuration

    CORS is enabled with origins=['https://example.com'], so only that origin is allowed cross-origin access.
  2. Step 2: Understand route behavior

    The /data route returns JSON and inherits the CORS policy set on the app.
  3. Final Answer:

    Only requests from https://example.com will be allowed cross-origin access -> Option D
  4. Quick Check:

    Origins list limits access = A [OK]
Hint: Origins list restricts which sites can access [OK]
Common Mistakes:
  • Assuming all origins are allowed by default
  • Thinking CORS disables all access without explicit allow
  • Confusing localhost with example.com
4. Identify the error in this Flask app CORS setup:
from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(origins='*')

@app.route('/')
def home():
    return 'Hello'
medium
A. CORS is called without passing the Flask app instance
B. The origins parameter '*' is invalid and causes an error
C. The route function home() must return JSON for CORS to work
D. Flask app instance must be created after calling CORS

Solution

  1. Step 1: Check how CORS is called

    CORS() is called without passing the app instance, so it does not enable CORS on the app.
  2. Step 2: Understand consequences

    Without passing app, no CORS headers are added, so cross-origin requests will fail.
  3. Final Answer:

    CORS is called without passing the Flask app instance -> Option A
  4. Quick Check:

    Pass app to CORS() to enable it [OK]
Hint: Always pass app instance to CORS() [OK]
Common Mistakes:
  • Forgetting to pass app to CORS()
  • Thinking '*' is invalid (it's valid)
  • Believing CORS requires JSON response
5. You want to allow CORS only on the route /api/data for requests from https://trusted.com. Which Flask-CORS setup correctly achieves this?
hard
A. CORS(app, resources={r'/api/*': {'origins': '*'}})
B. CORS(app, resources={r'/api/data': {'origins': 'https://trusted.com'}})
C. CORS(app, origins='https://trusted.com')
D. CORS(app, resources={r'/api/data': {'origins': '*'}})

Solution

  1. Step 1: Understand resource-specific CORS

    To restrict CORS to a specific route, use the resources parameter with a route pattern and origins.
  2. Step 2: Match the route and origin

    CORS(app, resources={r'/api/data': {'origins': 'https://trusted.com'}}) correctly sets CORS only on '/api/data' with origins 'https://trusted.com'.
  3. Final Answer:

    CORS(app, resources={r'/api/data': {'origins': 'https://trusted.com'}}) -> Option B
  4. Quick Check:

    Use resources to limit routes and origins [OK]
Hint: Use resources dict to target specific routes [OK]
Common Mistakes:
  • Setting origins globally instead of per route
  • Using wildcard '*' when only one origin is needed
  • Using wrong route pattern like '/api/*' for exact match
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard