首页 文章

API网关CORS HTTP 415

提问于
浏览
0

好的,我已经遍布这些互联网寻找对我的问题的一些见解;我可能已经通过了超过80个堆栈溢出线程RE api网关等等,但它们似乎都没有帮助或说得足够接近我的问题 .

我是API Gateway和cors的新手,但是让我们看看我是否可以清楚地表达我所看到的问题:

为Kinesis firehose设置API网关代理,为红移数据库提供保护 . 代理,firehose和redshift网关在隔离调用时启动并正常工作,但是当从我们的某个客户站点调用时,我们会收到如下错误:

XMLHttpRequest cannot load [api_call_here]. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin [origin_website_here] is therefore not allowed access. The response had HTTP status code 403.

好吧,这强烈暗示需要CORS,对吧?在资源的控制台中,启用cors,deploy,new error:

XMLHttpRequest cannot load [api_call_here]. Request header field $cookies is not allowed by Access-Control-Allow-Headers in preflight response.

Ooooooooookay,来自启用CORS功能添加的新OPTIONS方法,在集成响应中允许标头,在访问控制下允许标头添加'$ Cookies',部署 .

现在我得到一个新的错误,非常类似于第一个错误:

XMLHttpRequest cannot load [api_call_here]. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin [origin_website_here] is therefore not allowed access. The response had HTTP status code 415.

请注意,第一个错误的HTTP状态代码为403,第三个错误的状态代码为415.这就是我遇到问题的地方 . 如果我进入GET方法充当代理方法,身体映射模板,我选择“当没有定义模板(推荐)时” .

现在,我读到当API网关无法找到匹配模板时,它拒绝415错误,因此我将上述选项更改为“当没有模板匹配请求Content-Type标头时” . 这使得错误消失,但是当从原点调用时,数据仍然没有被持久化为红移 . 再次,当我直接从邮递员,失眠或只是一个普通的旧地址栏调用api时,记录会很好地添加 .

打开chrome并查看 Headers 我发现cookie是以text / html形式出现的 .

关于那里的模板映射,我只为application / json定义了一个map;这可能是问题的一部分吗?

此外,从chrome控制台查看的响应标头如下:

content-length:37
content-type:application/json
date:Wed, 19 Apr 2017 23:43:35 GMT
status:415
via:1.1 [blahblabbleblah].cloudfront.net (CloudFront)
x-amz-cf-id:[blahblabbleblah]
x-amzn-requestid:[blahblabbleblah]
x-cache:Error from cloudfront

我对此比较陌生,所以我不知道cloudfront如何适应这一点,特别是当控制台抱怨没有access-control-allow-origin标头时,它会抱怨媒体类型 .

无论如何,任何关于如何解决第三个错误的帮助都将是最受欢迎的 .

1 回答

  • 0

    您的浏览器请求中的内容类型是什么?如果请求中未指定content-type标头,则API Gateway默认采用“application / json” .

    打开chrome并查看 Headers 我发现cookie是以text / html形式出现的 .

    我不确定您是否认为请求中的“Content-type”标头的值设置为“text / html” . 如果是,那就是问题所在 . 您将需要匹配的模板,或者您需要通过选择“当没有模板匹配请求Content-Type标头时”默认情况下通过 .

相关问题