Skip to content

[Bug] Python Azure Function worker incorrectly URL encodes cookie value #1794

@mabeshark

Description

@mabeshark

Expected Behavior

Azure Function worker using Python FastAPI should not URL encode cookie values

Expected behavior on HTTP Response Headers:
set-cookie: test="hello//world"; Path=/; SameSite=lax

e.g. when using Python FastAPI without Azure Functions, it correctly does not URL encode.

import uvicorn
from fastapi import FastAPI
from fastapi.responses import PlainTextResponse

app = FastAPI()

@app.get("/")
def http_trigger():
    response = PlainTextResponse("", status_code=200)
    response.set_cookie(key='test', value='hello//world')

    return response

if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=7071)

Run curl -v http://localhost:7071/ and response is correct as set-cookie: test="hello//world"; Path=/; SameSite=lax

Actual Behavior

Actual incorrect behavior on HTTP Response Headers, cookie value is incorrect and unexpectedly URL encoded

Set-Cookie: test=hello%2F%2Fworld; domain=; path=/; samesite=lax

Tested bug with

  • Python 3.12 with FastAPI
  • Azure Functions Core tools 4.3.0 locally
  • Deployed to production Azure Function

Steps to Reproduce

  1. Run func start or deploy to Azure using sample code provided below
  2. Send a test HTTP request e.g. curl -v http://localhost:7071/
  3. Azure Functions worker incorrectly URL encodes the response cookie value in the Set-Cookie header

Relevant code being tried

import azure.functions as func
from fastapi import FastAPI
from fastapi.responses import PlainTextResponse

app = FastAPI()
func_app = func.AsgiFunctionApp(app=app, http_auth_level=func.AuthLevel.ANONYMOUS)

@app.get("/")
def http_trigger():

    response = PlainTextResponse("", status_code=200)
    response.set_cookie(key='test', value='hello//world')

    return response

Relevant log output

N/A

requirements.txt file

azure-functions
fastapi

Where are you facing this problem?

Production Environment (explain below)

Function app name

Private

Additional Information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions