【问题标题】:405 Err on OPTIONS preflight for upload_url on Google Appengine SDK on different port #405 Err on OPTIONS preflight for upload_url on Google Appengine SDK on different port #
【发布时间】:2019-04-07 12:42:44
【问题描述】:

我有一个 Google AppEngine 项目在生产环境中运行良好,但在本地运行不佳。

有一个 React 浏览器应用在本地运行在 3001 端口,一个 python api 服务运行在 9090。

当我尝试通过 React 客户端上传文件时,我首先调用一个 REST 端点,它将 blobstore get_upload_url() 返回给客户端。这个 url 类似于:http://localhost:9090/_ah/upload/aghkZXZ-...

当我从浏览器客户端向该 url 发出 POST 请求以实际上传文件时,我在 OPTIONS 预检检查中得到 405。据我了解,这是由于端口不同。这只发生在本地 App Engine SDK 中,因为我在生产中使用 dispatch.yaml 设置将所有内容都放在同一个域/端口上。

我前段时间研究了 SDK 代码并进行了修改。 (https://gist.github.com/blainegarrett/4d3b3081d09b4ff7be00765eb32b0d94)

但是,自从将 Google Cloud 升级到 218.0.0 后,hack 被覆盖了,我又回到了原点。

以下是 blobstore 上传 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() 进行上传调用。

是否有人对如何在端口不同时绕过预检检查和/或允许以不那么骇人听闻的方式对上传 url 进行 OPTIONS 检查有任何建议?

【问题讨论】:

    标签: google-app-engine file-upload cors xmlhttprequest blobstore


    【解决方案1】:

    更新:我仍然希望听到有关 SDK 上 405 的答案,但我能够通过摆脱 xhr 进度侦听器来避开预检检查。我最初断言端口差异触发了预检检查是不正确的。这是进度回调。

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

    查看研究:CORS request is preflighted, but it seems like it should not be

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多