使用路由参数时,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
EXPERTE
gefragt vor 5 Monaten56 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen

Relevanter Inhalt