Нет Access-Control-Allow-Origin при загрузке в Google Cloud Storage методом PUT с настройками cors в gsutil - PullRequest
0 голосов
/ 03 мая 2020

Мы нашли весь интернет, чтобы найти решение этой проблемы, и все же не повезло! У нас есть веб-сайт, на котором мы позволяем пользователям загружать файлы непосредственно в корзину Google Cloud Storage с подписанным URL-адресом для загрузки, сгенерированным из серверной части. Мы загружаем с помощью запроса PUT. Всякий раз, когда пользователь загружает файл, в консоли инструментов chrome dev возникает ошибка: 1001 *

No 'Access-Control-Allow-Origin' header is present on the requested resource.

Мы обновили наши настройки cors для корзины следующим образом:

$ gsutil cors get gs://{BUCKET_NAME}
[{"method": ["POST", "PUT", "GET", "HEAD", "OPTIONS"], "origin": ["*"], "responseHeader": ["*"]}]

Но, тем не менее, всякий раз, когда мы отправляем запрос, в заголовке ответа не возвращается заголовок Access-Control-Allow-Origin.

Несколько замечаний: мы используем экземпляр механизма вычислений, и наше доменное имя управляется Cloudflare.

В некоторых статьях предполагалось, что это может быть проблема с кэшированием, но мы сталкивались с этой проблемой в течение нескольких недель, и ничего не изменилось.

Я слышал, что для методов PUT могут потребоваться предварительные запросы, Я знаю теоретическую часть предполетных запросов, но никогда не использовал ее раньше и не уверен, что делать, должен ли я добавить еще один запрос перед отправкой основного запроса на выборку, или это все автоматически c и происходит за кулисами?

1 Ответ

0 голосов
/ 07 мая 2020

Я опубликую свой комментарий как ответ, так как он слишком длинный для секции комментариев.

Исследуя многочисленные посты, ссылающиеся на эту ошибку, я наткнулся на эту , которая может быть связано с вашим, так как пользователь загружает файлы в GCS.

Здесь вы также можете найти документацию, касающуюся инициирования возобновляемых загрузок в GCS.

При использовании возобновляемых загрузок сначала необходимо сделать POST-запрос к конечной точке, чтобы запустить его, а затем 1 или более (в зависимости от количества чанков) запросов PUT для фактической загрузки. Если заголовок Origin не указан в первом POST, последний блок не будет содержать заголовков, которые позволяют CORS работать, и браузер отклонит запрос, даже если он действительно может быть выполнен (если файл действительно загружен).

Надеюсь, эта информация поможет.

...