Implementation of CORS in FastAPI

Joël-Steve N.
2 min readJul 9, 2024

--

Handling Cross-Origin Requests

Cross-Origin Resource Sharing (CORS) is a security feature implemented by web browsers that restricts web applications running under one domain from making requests to another domain. FastAPI provides built-in support for CORS, making it straightforward to configure and manage cross-origin requests in your API. In this article, we will explore how to implement CORS in FastAPI to handle cross-origin requests effectively.

Project Structure

Let’s start by setting up a basic project structure for our FastAPI application:

fastapi_cors/
├── app/
│ ├── __init__.py
│ ├── main.py
├── requirements.txt
└── README.md

1. Setting Up Your Environment

First, create a virtual environment and install FastAPI and Uvicorn:

python -m venv venv
source venv/bin/activate # On Windows use `venv\Scripts\activate`
pip install fastapi uvicorn

2. Creating a FastAPI Application

Create a simple FastAPI application to demonstrate CORS configuration.

Example: app/main.py

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

# CORS (Cross-Origin Resource Sharing) middleware configuration
origins = [
"http://localhost",
"http://localhost:8080",
"https://example.com",
"https://www.example.com",
]

app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["GET", "POST", "PUT", "DELETE"],
allow_headers=["*"],
)

@app.get("/")
async def main():
return {"message": "Hello World"}

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}

3. Understanding CORS Configuration

  • allow_origins: Specifies the origins that are allowed to access the resources. You can use wildcards (*) for all origins or specific domain names.
  • allow_credentials: Indicates whether the API supports credentials such as cookies and authorization headers in cross-origin requests.
  • allow_methods: Lists the HTTP methods allowed in cross-origin requests.
  • allow_headers: Specifies the headers allowed in cross-origin requests.

4. Running the FastAPI Application

Run the FastAPI application using Uvicorn:

uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

5. Testing CORS

Open your browser’s developer tools and inspect the network requests. Send requests from different origins (e.g., http://localhost, http://localhost:8080) to verify that CORS is properly configured and allowing or rejecting requests based on the specified origins.

Conclusion

Implementing CORS in FastAPI is crucial for allowing secure cross-origin requests in your web applications. By configuring CORS middleware with appropriate settings, you can control which origins, methods, and headers are permitted to access your API resources, enhancing security while enabling seamless integration with other domains.

If you found this article helpful, consider following me for more insights on implementing CORS and best practices in securing your FastAPI applications.

Secure cross-origin requests with confidence!

--

--

Joël-Steve N.
Joël-Steve N.

Written by Joël-Steve N.

Senior Back-End Developer (Python, JavaScript, Java) | Community Manager & Tech Leader

No responses yet