使用路由参数时,CloudFront无法转发查询参数。

0

【以下的问题经过翻译处理】 我的设置为:CloudFront -> HTTP API -> Lambda

API有两个路由:/route1/route2/{param}

缓存策略包含myquery参数。 当我调用/route1?myquery=foo时,我可以在Lambda负载中找到myquery。 当我调用/route2/something?myquery=foo时,我无法在负载中找到myquery

当我直接调用API,跳过CloudFront - 然后myquery始终在负载中。 可能的原因是什么?

profile picture
专家
已提问 5 个月前51 查看次数
1 回答
0

【以下的回答经过翻译处理】 嗨,马丁,感谢您提供细节。

以下是您需要在Cloudfront分发中更改的内容。

  1. 创建一种行为,并将路径模式设置为“foo / \ *”,确保您包括/和星号。
  2. 创建一个自定义的“Origin Request Policy”,其中不包括“ Host”标头。为简单起见,我只在实验室中使用了“ Accept”标头。然后将此策略应用于先前步骤中的行为。请确保将“Query strings”设置为“all”。 这是我的实验室输出: API网关响应: ''' { "version": "2.0", "routeKey": "ANY /foo/{id}", "rawPath": "/foo/123", "rawQueryString": "one=two", "headers": { "accept": "/", "accept-encoding": "gzip, deflate, br", "content-length": "0", "host": "fjmwwrrzv7.execute-api.eu-west-1.amazonaws.com", "postman-token": "988b16f3-a171-4e8e-9453-00ef6534b5bc", "user-agent": "PostmanRuntime/7.30.0", "x-amzn-trace-id": "Root=1-63b0b6a8-17db418f57a7e4c1650d61f8", "x-forwarded-for": "51.38.214.163", "x-forwarded-port": "443", "x-forwarded-proto": "https" }, "queryStringParameters": { "one": "two" }, "requestContext": { "accountId": "687732141706", "apiId": "fjmwwrrzv7", "domainName": "fjmwwrrzv7.execute-api.eu-west-1.amazonaws.com", "domainPrefix": "fjmwwrrzv7", "http": { "method": "GET", "path": "/foo/123", "protocol": "HTTP/1.1", "sourceIp": "51.38.214.163", "userAgent": "PostmanRuntime/7.30.0" }, "requestId": "eCF6Vg2ajoEEP5g=", "routeKey": "ANY /foo/{id}", "stage": "$default", "time": "31/Dec/2022:22:24:40 +0000", "timeEpoch": 1672525480366 }, "pathParameters": { "id": "123" }, "isBase64Encoded": false } ''' CloudFront 响应: ''' { "version": "2.0", "routeKey": "ANY /foo/{id}", "rawPath": "/foo/123", "rawQueryString": "one=two", "headers": { "accept": "/", "content-length": "0", "host": "fjmwwrrzv7.execute-api.eu-west-1.amazonaws.com", "user-agent": "Amazon CloudFront", "via": "1.1 c000bcf50af6babd5b4e98a9c6198f04.cloudfront.net (CloudFront)", "x-amz-cf-id": "9tJHL1cAR3M9gB5YUmLbgB4CtG5Er7rat3a59m2vTKc_Os_V0Btfng==", "x-amzn-trace-id": "Root=1-63b0b6a1-02aab142769ccff63b4a262f", "x-forwarded-for": "51.38.214.165, 15.158.56.86", "x-forwarded-port": "443", "x-forwarded-proto": "https" }, "queryStringParameters": { "one": "two" }, "requestContext": { "accountId": "687732141706", "apiId": "fjmwwrrzv7", "domainName": "fjmwwrrzv7.execute-api.eu-west-1.amazonaws.com", "domainPrefix": "fjmwwrrzv7", "http": { "method": "GET", "path": "/foo/123", "protocol": "HTTP/1.1", "sourceIp": "51.38.214.165", "userAgent": "Amazon CloudFront" }, "requestId": "eCF5UjfhjoEEMSg=", "routeKey": "ANY /foo/{id}", "stage": "$default", "time": "31/Dec/2022:22:24:33 +0000", "timeEpoch": 1672525473811 }, "pathParameters": { "id": "123" }, "isBase64Encoded": false } '''
profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则