405 Ошибка при предварительном просмотре OPTIONS для upload_url в Google Appengine SDK на другом порту # - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть проект Google AppEngine, который отлично работает на производстве, но не локально.

Существует локальное приложение браузера React на порте 3001 и служба API Python, работающая на 9090.

Когда я пытаюсь загрузить файлы через клиент React, я сначала вызываю конечную точку REST, которая возвращает хранилище BLOB-объектов get_upload_url() клиенту. Этот URL-адрес выглядит примерно так: http://localhost:9090/_ah/upload/aghkZXZ-... <- обратите внимание, что порт - это служба Python </p>

Когда я создаю запрос POST к этому URL-адресу от клиента браузера, чтобы фактически загрузить файл, я получаю 405 при проверке перед полетом OPTIONS. Насколько я понимаю, это связано с тем, что порты разные. Это происходит только в локальном App Engine SDK, так как я использую настройки dispatch.yaml на производстве, чтобы все было в одном домене / порту.

Я копался в коде SDK некоторое время назад и применил взлом. (https://gist.github.com/blainegarrett/4d3b3081d09b4ff7be00765eb32b0d94)

Однако после обновления Google Cloud до 218.0.0 взлом был перезаписан, и я вернулся к исходной точке.

Вот заголовки URL для загрузки в интернет-магазин:

OPTIONS /_ah/upload/aghkZXZ-Tm9uZXIiCxIVX19CbG9iVXBsb2FkU2Vzc2lvbl9fGICAgICA77ALDA HTTP/1.1
Host: localhost:9090
Connection: keep-alive
Origin: http://localhost:3001
Access-Control-Request-Method: POST
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

В настоящее время я использую vanilla XMLHttpRequest () специально для вызова загрузки.

У кого-нибудь есть предложения о том, как обойти проверку перед полетом, когда порты разные, и / или разрешить проверки OPTIONS для URL загрузки менее хакерским способом?

1 Ответ

0 голосов
/ 03 ноября 2018

Обновление: я все еще хотел бы услышать ответ относительно 405 на SDK, но я смог избежать проверки перед полетом, избавившись от слушателя прогресса xhr. Мое первоначальное утверждение о том, что разность портов вызывала предпечатную проверку, было неверным. Это был обратный вызов прогресса.

xhr.upload.addEventListener('progress', function(e) { .. }

См. Исследование по: Запрос CORS предварительно выдан, но, похоже, он не должен быть

...