【发布时间】:2020-08-06 22:34:35
【问题描述】:
我正在开发一个放大反应应用程序。在应用程序中,我轮询了一个 S3 bucket,我希望它会在几分钟后被填充。为清楚起见,流程为:
- 用户将文本文件上传到
S3,应用在响应中获取文件 url - 然后应用程序使用
S3 bucketuri 向aws api-gateway发送请求,这会触发lambda,然后调用aws textract,进而触发第二个lambda,它会写入S3 bucket。第一个lambda向应用返回一个 jobId。 - 然后应用将轮询
S3 bucket,以便使用 jobId 获取响应文件并将该文件显示给用户。
最初在轮询存储桶时,我会在我的 api 调用中使用结果存储桶 url。
这在本地运行应用程序时工作正常,因为存储桶 url 使用 http 协议,在创建文件之前返回 status code 404。
然后我为应用程序创建了一个cloudfront 分发,轮询请求返回错误:xhr.js:178 Mixed Content: The page at '<>my cloudfront url>' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint '<my endpoint>'. This request has been blocked; the content must be served over HTTPS.,这很有意义。
但是,将应用程序云端分发中的查看器协议行为从 Redirect HTTP to HTTPS 更改为 HTTP and HTTPS 似乎不起作用。
所以我想我可以为S3 结果存储桶创建第二个云端分发,因为它使用https。
然而,当我现在运行 api 调用时,我得到一个 403 status code 而不再是 404。
所以我尝试设置自定义错误响应,将403 错误映射到404。我等了好一会儿,因为云端可能需要一些时间,但这似乎仍然没有任何区别。
更改我的应用程序中的代码以期望 403 而不是 404 工作,并且在文件写入结果后一段时间 S3 bucket 我得到文件并将其显示在应用程序上。但我不想期待403,因为对于不存在的东西来说,这完全是错误的代码。
我在这里有几个问题:
- 这是正确的方法吗(为结果
S3 bucket分配cloudfront)? - 为什么我在使用
cloudfronturl 时会得到403而不是使用S3结果url 时得到的404? - 如果第 1 点是正确的方法,我该如何解决第 2 点?
【问题讨论】:
标签: amazon-web-services amazon-s3 amazon-cloudfront