Доступ к ответу XMLHttpRequest на запрос preflight не проходит проверку контроля доступа
Я пытаюсь загрузить файл с помощью FilePond (с Svelte) в Google Storage, подписанный URL. Когда Chrome делает preflight, он получает 200, но потом, похоже, не получает заголовок Access-Control-Allow-Origin в этом ответе.
В консоли JS ошибка:
Доступ к XMLHttpRequest на 'https://storage.googleapis.com/...' от origin 'https://***.appspot.com' был заблокирован политикой CORS: Ответ на предварительный запрос не проходит проверку контроля доступа: No Заголовок 'Access-Control-Allow-Origin' присутствует на запрашиваемом ресурсе.
Я генерирую подписанный URL в Python:
bucket = storage_client.bucket(settings.PRIVATE_GCP_BUCKET)
blob = bucket.blob(f'upload/video_{obj.id}.mp4')
# Get the time in UTC
ini_time_for_now = datetime.now(timezone.utc)
# Set the expiration time
expiration_time = ini_time_for_now + timedelta(minutes=15)
signed_url = blob.generate_signed_url(expiration=expiration_time, method='POST',
version='v4')
это работает и URL возвращается JS клиенту, правильно установленный в конфигурации FilePond.
Моя конфигурация CORS следующая:
[
{
"origin": [
"https://***.appspot.com"
],
"method": [
"GET", "PUT", "POST"
],
"responseHeader": [
"Content-Type", "Content-Length", "Access-Control-Allow-Origin", "x-goog-resumable"
],
"maxAgeSeconds": 604800
}
]
Я пробовал множество вариантов заголовков и т.д.
Как правильно настроить мое ведро, чтобы разрешить загрузку файла? Это ошибка конфигурации GCP bucket или что-то еще не так? Я также пробовал передавать
content_type='application/octet-stream',
to generate_signed_url.