POST-запрос Cloud Run завершается с ошибкой с предварительным кодом CORS 405 (серверная часть FastAPI)Python

Программы на Python
Ответить
Anonymous
 POST-запрос Cloud Run завершается с ошибкой с предварительным кодом CORS 405 (серверная часть FastAPI)

Сообщение Anonymous »

У меня есть серверная часть FastAPI, развернутая в Google Cloud Run, и внешний интерфейс Vite + React. Я вызываю конечную точку POST /rag из внешнего интерфейса.
Первая проблема заключается в том, что пользовательский интерфейс Swagger в FastAPI показывает старый ответ:
Изображение

Показанный выше пользовательский интерфейс Swagger обслуживается из URL-адреса Cloud Run /docs, а не из локального экземпляра FastAPI.
Команда CURL:

Код: Выделить всё

curl -X 'POST' \
'https://vci-188125714482.asia-south1.run.app/rag' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"query": "yo"
}'
URL-адрес запроса:

Код: Выделить всё

https://vci-188125714482.asia-south1.run.app/rag
Тело ответа:

Код: Выделить всё

{
"answer": "AI result for: yo"
}
Заголовки ответов:

Код: Выделить всё

 alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
content-length: 30
content-type: application/json
date: Mon,29 Dec 2025 11:33:43 GMT
server: Google Frontend
x-cloud-trace-context: 2b70f32dff26dc2279b45c2643b5f0b5;o=1
Однако должно отображаться сообщение «Вы спросили: йо», как определено в vc-rag-backend/main.py:

Код: Выделить всё

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from fastapi.responses import JSONResponse

app = FastAPI()

app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=False,
allow_methods=["*"],     # MUST be *
allow_headers=["*"],     # MUST be *
)

class Query(BaseModel):
query: str

@app.post("/rag")
async def rag(data: Query):
return {
"answer": f"You asked: {data.query}",
"sources": []
}
Я пробовал такие вещи, как сборка npm run, развертывание Firebase и пересборка версии Cloud Run, но вместо этого по-прежнему отображается результат AI для: йо.
Структура репозитория выглядит следующим образом:

Код: Выделить всё

VCI/
├── main.py                (old backend code)
├── vc-rag-backend/
│   ├── main.py            (new backend code shown above)
│   ├── Dockerfile
│   └── requirements.txt
Вторая проблема заключается в том, что предварительный запрос OPTIONS браузера
к /rag возвращает ответ 405, что приводит к ошибке CORS во внешнем интерфейсе:
Изображение

Cloud Run развертывается через облако Триггер сборки, подключенный к GitHub. Триггер настроен на использование файла Dockerfile, но я не уверен, создается ли он из корня репозитория или из vc-rag-backend/.
Как устранить эти две проблемы?

Подробнее здесь: https://stackoverflow.com/questions/798 ... pi-backend
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»