У меня есть проект 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 загрузки менее хакерским способом?