我已经构建了一个SPA作为其前端做出反应,而无服务器(AWS lambda)框架具有其后端。
已在S3中部署了react应用程序。此应用程序通过AWS API Gateway与lambda函数(无服务器)通信。
由于位于S3域和后端的AWS应用程序(AWS API Gateway,AWS lambda,DynamoDB)位于不同的域中。发生CORS问题。
为了解决CORS问题,我已将 Access-Control-Allow-Origin 标头硬编码为反应应用的域名网址。因此,后端了解起源来自已知来源并解决原始CORS错误。
但是,还有另一个名为" Access-Control-Allow-Credentials"必须是真实的访问请求的cookie。
如果访问控制 - 允许 - 来源是" *",则访问控制 - 允许 - 凭据必须 false ,出于隐私考虑。
所以,我已将 Access-Control-Allow-Origin 设置为 React的域,然后 Access-Control-Allow-Credentials 可能 true 。
我在API网关响应方法和集成响应方法中添加了 Access-Control-Allow-Credentials 标头。 问题是我没有在客户端获取 Access-Control-Allow-Credentials 标头作为响应。我得到除了这个之外的所有其他标题。测试API网关控制台提供标题,但在邮递员和浏览器中测试时,不会收到上述标题。
问题是 Access-Control-Allow-Credentials 标头未在浏览器和邮递员中检索为响应,但在AWS API Gateway控制台中进行测试时会显示。可能是什么问题?
答案 0 :(得分:0)
请为您的API发布导出的Swagger。我可以确认“Access-Control-Allow-Credentials”标题没有什么特别之处,因此您应该能够根据需要进行映射。
swagger: "2.0"
info:
version: "2016-09-17T00:36:34Z"
title: "foo"
host: "45c24yfor1.execute-api.us-east-1.amazonaws.com"
basePath: "/test"
schemes:
- "https"
paths:
/:
get:
consumes:
- "application/json"
produces:
- "application/json"
responses:
200:
description: "200 response"
schema:
$ref: "#/definitions/Empty"
headers:
Cookie:
type: "string"
Access-Control-Allow-Credentials:
type: "string"
Set-Cookie:
type: "string"
x-amazon-apigateway-integration:
responses:
default:
statusCode: "200"
responseParameters:
method.response.header.Access-Control-Allow-Credentials: "'test'"
requestTemplates:
application/json: "{\"statusCode\": 200}"
passthroughBehavior: "when_no_match"
type: "mock"
definitions:
Empty:
type: "object"
title: "Empty Schema"
命令:
curl -v https://45c24yfor1.execute-api.us-east-1.amazonaws.com/test
< HTTP/1.1 200 OK
< Date: Sat, 17 Sep 2016 00:36:46 GMT
< Content-Type: application/json
< Content-Length: 0
< Connection: keep-alive
< Access-Control-Allow-Credentials: test
< x-amzn-RequestId: d04135bc-7c6e-11e6-a593-559956e50e8a
< X-Cache: Miss from cloudfront
< Via: 1.1 b63769e2d89c89274acd908e4bfcb9f4.cloudfront.net (CloudFront)
< X-Amz-Cf-Id: 3Nevesi15lEGox0jrFq8B2HEknHbbFfISlg4yv7Lw3X90S2sUIWE_g==