How to Get HTTP Headers in a Flask App

Introduction

In this Byte we'll be taking a look at HTTP request headers in Flask. They can carry important information between the client and the server, and understanding how to access them is needed for most any dynamic web application.

What are HTTP request headers and why use them?

HTTP headers let the client and the server share additional information with each other, most often request metadata. As part of an HTTP request or response, the header is not displayed on the web page but is sent to the server or client. They can contain lots of different information, like the type of browser making the request, the content type being returned, individual user information, and more.

Given this, HTTP headers can are used for quite a few tasks, like authentication, cache control, debug/logging information, and more. They provide a flexible way to implement features that are not explicitly covered by the standard HTTP protocol.

Accessing HTTP Request Headers in Flask

Flask, a micro web framework in Python, makes it super easy to access HTTP headers. The Flask request object contains all the information that the client browser sends to the app. This includes the HTTP headers.

To get these headers, you can use the request.headers attribute. This attribute returns a dictionary-like object, allowing you to retrieve header values with standard Python dictionary syntax.

Here is a simple example:

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def home():
    user_agent = request.headers.get('User-Agent')
    return f'Your user agent is: {user_agent}'

In this code, we're creating a basic Flask app with a single route. When you navigate to the home page, Flask retrieves the 'User-Agent' header from the request and returns it as a string.

Practical Code Example

Let's take a look at a more practical example. Suppose we have an API that returns different data based on the 'Accept-Language' header. This header tells the service the preferred language of the client.

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/data')
def data():
    language = request.headers.get('Accept-Language')

    if language == 'en-US':
        return jsonify({'message': 'Hello, user!'})
    elif language == 'es-ES':
        return jsonify({'message': '¡Hola, usuario!'})
    elif language == 'es-SR':
        return jsonify({'message': 'Здраво, кориснику!'})
    else:
        return jsonify({'message': 'Hello, user!'})

In this example, the API checks the 'Accept-Language' header and returns a greeting in the appropriate language. If the language is not supported, it just returns English by default.

Conclusion

In this short Byte we breifly looked at HTTP request headers in Flask, covering what they are, why they're used, and how to access them in your Flask app. We've seen that headers can transport a wide range of information and even offer a flexible way to control your application's behavior.

Last Updated: September 15th, 2023
Was this helpful?

© 2013-2024 Stack Abuse. All rights reserved.

AboutDisclosurePrivacyTerms