【问题标题】:Aurelia fetch AWS API Gateway give opaque responseAurelia fetch AWS API Gateway 给出不透明的响应
【发布时间】:2017-07-25 09:48:06
【问题描述】:

我有一个接受 POST 请求以触发 Lambda 函数并返回结果的 AWS API 网关。

我已尝试在 API 上启用 CORS。

const url = 'XXX'
@inject(HttpClient)
export class App {
  constructor(http) {
    http.configure(config =>
      config
        .useStandardConfiguration()
        .withBaseUrl(url)
        .withDefaults({
          // mode: 'no-cors',
          headers: {
            'Content-type' : 'application/json'
          }
        }));

    this.http = http;

    this.http.fetch('/', { method: 'post', body: {data: 'XXXX'} })
        .then(res => res.json())
        .then(console.log)
        .catch(console.error)
}

结果是:

body:null
bodyUsed:false
headers:Headers
ok:false
status:0
statusText:""
type:"opaque"
url:""

这个我试过了:

  • 启用 Lambda 代理
  • 启用 CORS
  • 使用 OPTIONS 端点进行预检响应。

我什至尝试将 Lambda 函数更改为:

exports.handler = function(event, context, callback) {
    callback(null, {"success": true});
}

确保 lambda 函数“有效”(正如在 Cloudwatch 中看到的那样)

【问题讨论】:

  • 据我了解 Fetch 规范中的要求,您最终得到type:"opaque" 的唯一方法是请求的response taintingopaque。如果请求模式为no-cors,那么最终导致响应污染为opaque 的唯一方法是。那么你的代码中真的有mode: 'no-cors' 注释掉了吗?如果不是,那么您的代码的其他部分似乎必须将请求模式设置为no-cors。否则你不可能得到type:"opaque"
  • (您基本上永远不想在获取请求时故意发送mode: 'no-cors'(除非您可能正在使用 Service Worker 缓存做某事)。例如,如果您这样做,您将无法做到,设置Content-type' : 'application/json' 并让它工作。即使当它以其他方式“工作”时,你也只会得到一个响应,即你的 JavaScript 代码除了缓存它之外无法做任何事情。)
  • @sideshowbarker 是的,我已经在我的代码中注释掉了mode: 'no-cors'

标签: amazon-web-services cors fetch aurelia


【解决方案1】:

您不需要在 Aurelia http 中启用 CORS,因为 Aurelia Fetch 客户端默认是 CORS。我会说问题出在您的 AWS API 网关上的 99%。您是否尝试过从另一个应用程序 GET 到您的端点? (例如使用 Postman chrome 扩展)。有用吗?

【讨论】:

    猜你喜欢
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 2019-10-25
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2017-08-08
    相关资源
    最近更新 更多